InfluxDB集群

news/2024/7/4 7:47:24 标签: InfluxDB, 时序数据库

参考: https://github.com/chengshiwen/influxdb-cluster/wiki

简介

  • InfluxDB Cluster 是一个开源的时间序列数据库,没有外部依赖。它对于记录指标、事件和执行分析很有用。

  • InfluxDB Cluster 启发于 InfluxDB Enterprise、InfluxDB v1.8.10 和 InfluxDB v0.11.1,旨在替代 InfluxDB Enterprise。

  • InfluxDB Cluster 易于维护,可以与上游 InfluxDB 1.x 保持实时更新。

特性

  • 内置 HTTP API,无需编写任何服务器端代码即可启动和运行。
  • 数据可以被标记 tag,允许非常灵活的查询。
  • 类似 SQL 的查询语言。
  • 集群支持开箱即用,因此处理数据可以水平扩展以。集群目前处于生产就绪状态
  • 易于安装和管理,数据写入查询速度快。
  • 旨在实时应答查询。这意味着每个数据点在到时都会被计算索引,并且在 < 100 毫秒内返回的查询中立即可用。

架构

InfluxDB Cluster 安装由两组独立的进程组成:Data 节点和 Meta 节点。集群内的通信如下所示:

Meta 节点

元节点持有以下所有的元数据:

  • 集群中的所有节点和它们的角色。
  • 集群中存在的所有数据库和保留策略。
  • 所有分片和分片组,以及它们存在于哪些节点上。
  • 集群用户和他们的权限。
  • 所有的连续查询。

Data 节点

数据节点持有所有的原始时间序列数据和元数据,包括:

  • 测量值
  • 标签键和值
  • 字段键和值

说明

Meta 节点通过 TCP 协议和 Raft 共识协议相互通信,默认都使用端口 8089,此端口必须在 Meta 节点之间是可访问的。默认 Meta 节点还将公开绑定到端口 8091 的 HTTP API,influxd-ctl 命令使用该 API。

Data 节点通过绑定到端口 8088 的 TCP 协议相互通信。Data 节点通过绑定到 8091 的 HTTP API 与 Meta 节点通信。这些端口必须在 Meta 节点和 Data 节点之间是可访问的。

在集群内,所有 Meta 节点都必须与所有其它 Meta 节点通信。所有 Data 节点必须与所有其它 Data 节点和所有 Meta 节点通信。

集群搭建

集群要求

Meta 要求

生产环境安装过程设置三个 Meta 节点,每个 Meta 节点在自己的服务器上运行。

InfluxDB Cluster 需要 至少三个 Meta 节点奇数个 Meta 节点 以实现高可用和冗余。

注 1InfluxDB Cluster 不建议超过三个 Meta 节点,除非您的服务器之间的通信存在长期可靠性问题。

注 2:强烈建议不要在同一服务器上部署多个 Meta 节点,因为如果该特定服务器无响应,它会产生更大的潜在故障。InfluxDB Cluster 建议在占用空间相对较小的服务器上部署 Meta 节点。

注 3:要使用单个 Meta 节点启动集群,请在启动单个 Meta 节点时传递 -single-server 标志。

假设有三台服务器:influxdb-meta-01, influxdb-meta-02influxdb-meta-03

端口: Meta 节点通过端口 808880898091 进行通信。

Data 要求

生产环境安装过程设置两个 Data 节点,每个 Data 节点在自己的服务器上运行。

InfluxDB Cluster 需要 至少两个 Data 节点 才能实现高可用性和冗余。

注 1:没有要求每个 Data 节点都运行在自己的服务器上。但是,最佳实践是将每个 Data 节点部署在专用服务器上。

注 2InfluxDB Cluster 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口 8086(HTTP API 的默认端口)。

假设有两台服务器:influxdb-data-01influxdb-data-02

端口: Data 节点通过端口 808880898091 进行通信。

集群配置文件

下载 docker-compose.yml 集群配置文件

下载地址:https://github.com/chengshiwen/influxdb-cluster/blob/master/docker/quick/docker-compose.yml

version: "3.9"

services:

  influxdb-meta-01:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-01
    hostname: influxdb-meta-01
    restart: unless-stopped
    networks:
      - influxdb-cluster

  influxdb-meta-02:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-02
    hostname: influxdb-meta-02
    restart: unless-stopped
    networks:
      - influxdb-cluster

  influxdb-meta-03:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-03
    hostname: influxdb-meta-03
    restart: unless-stopped
    networks:
      - influxdb-cluster

  influxdb-data-01:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-data
    container_name: influxdb-data-01
    hostname: influxdb-data-01
    ports:
      - 8186:8086
    restart: unless-stopped
    networks:
      - influxdb-cluster

  influxdb-data-02:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-data
    container_name: influxdb-data-02
    hostname: influxdb-data-02
    ports:
      - 8286:8086
    restart: unless-stopped
    networks:
      - influxdb-cluster
      
networks:
  influxdb-cluster:

启动集群

docker-compose up -d

注:要持久化容器中的数据,请务必挂载所有 Meta 和 Data 节点的 /etc/influxdb 和 /var/lib/influxdb 目录。

关闭集群并清理相关数据

# 关闭集群
docker-compose down
# 关闭集群,并清除数据
docker-compose down -v

初始化集群

使用 docker exec 进入任意一个 **meta容器(必须是 meta 容器,不能使用 data 容器)**中执行如下命令即可:

# 添加 meta 节点
influxd-ctl add-meta influxdb-meta-01:8091
influxd-ctl add-meta influxdb-meta-02:8091
influxd-ctl add-meta influxdb-meta-03:8091

# 添加 data 节点
influxd-ctl add-data influxdb-data-01:8088
influxd-ctl add-data influxdb-data-02:8088

# 查看集群节点
influxd-ctl show

进入任意 data 节点执行测试:

# 创建库
$ create database history 
# 写入数据
$ insert cpu,name=m1 year=2022
# 查询数据
$ select * from cpu

http://www.niftyadmin.cn/n/5226918.html

相关文章

如何在VSCode中打包Vue项目?

使用VSCode作为Vue项目的开发环境后&#xff0c;我们需要了解如何打包Vue项目。本文将从多个方面对如何在VSCode中打包Vue项目进行详细阐述。 一、安装依赖 在打包Vue项目之前&#xff0c;我们需要先安装项目所需的依赖。在Vue项目中&#xff0c;可以通过以下命令安装依赖&am…

将数据导出为excel的js库有哪些

导出数据为Excel文件的JavaScript库有很多&#xff0c;其中一些常用的包括&#xff1a; SheetJS/xlsx&#xff1a;这是一个功能强大的库&#xff0c;可以用于读取和写入Excel文件&#xff0c;支持多种格式。 exceljs&#xff1a;这是一个纯JavaScript编写的库&#xff0c;可以…

KNN算法案例-鸢尾花分类

KNN算法案例-鸢尾花分类 因为气候不同&#xff0c;造就性不同&#xff0c;统计鸢尾花的关键特征数据&#xff1a;花萼长度、花萼宽度、花瓣长度&#xff0c;花瓣宽度植物学家划分&#xff1a; setosa(中文名&#xff1a;山鸢尾)versicolor(中文名&#xff1a;杂色鸢尾)virginic…

Elk:filebeat 日志收集工具和logstash

Elk:filebeat 日志收集工具和logstash Filebeat是一个轻量级的日志手机工具,所使用的系统资源比logstash部署和启动时使用的资源要小得多 Filebeat可以在非java环境使用&#xff0c;他可以代理logstash在非java环境上收集日志 缺点 Filebeat无法实现数据的过滤,一般是结合l…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

unity学习笔记12

一、物理系统 如何让一个球体受到重力的影响&#xff1f; 只要给物体添加刚体组件&#xff08;Rigidbody&#xff09;&#xff0c;就可以使其受到重力影响 1.刚体&#xff08;Rigidbody&#xff09;&#xff1a; 刚体是一个组件&#xff0c;用于使游戏对象受到物理引擎的控制。…

Ubuntu 22.04 LTS 上 安装 Redis

Ubuntu 22.04 LTS 上的Redis安装指南 Redis是一种开源的内存数据存储&#xff0c;可以用作数据库、缓存和消息代理等。本文将会介绍两种不同的安装方式&#xff0c;包括从源代码编译安装以及通过apt包管理器安装。 一、从源代码编译安装Redis 首先&#xff0c;我们需要下载最…

Codeforces Round 907 (Div. 2) (C 贪心 D套路? F dfs序+差分树状数组)

A&#xff1a; 这种操作题&#xff0c;每次先想这个操作有什么性质 对于2^0来说可以操作 第1位 对于2^1来说可以操作 第1-2位 对于2^2来说可以操作 第1-4位 &#xff08;第3位无法单独修改&#xff09; 对于2^3来说可以操作 第1-8位&#xff08;第5 6 7位无法单独修改&…