参考: 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 保持实时更新。
InfluxDB Cluster 安装由两组独立的进程组成:Data 节点和 Meta 节点。集群内的通信如下所示:
元节点持有以下所有的元数据:
数据节点持有所有的原始时间序列数据和元数据,包括:
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 节点在自己的服务器上运行。
InfluxDB Cluster 需要 至少三个 Meta 节点 和 奇数个 Meta 节点 以实现高可用和冗余。
注 1:InfluxDB Cluster 不建议超过三个 Meta 节点,除非您的服务器之间的通信存在长期可靠性问题。
注 2:强烈建议不要在同一服务器上部署多个 Meta 节点,因为如果该特定服务器无响应,它会产生更大的潜在故障。InfluxDB Cluster 建议在占用空间相对较小的服务器上部署 Meta 节点。
注 3:要使用单个 Meta 节点启动集群,请在启动单个 Meta 节点时传递
-single-server
标志。假设有三台服务器:
influxdb-meta-01
,influxdb-meta-02
和influxdb-meta-03
。
端口: Meta 节点通过端口 8088
、8089
和 8091
进行通信。
生产环境安装过程设置两个 Data 节点,每个 Data 节点在自己的服务器上运行。
InfluxDB Cluster 需要 至少两个 Data 节点 才能实现高可用性和冗余。
注 1:没有要求每个 Data 节点都运行在自己的服务器上。但是,最佳实践是将每个 Data 节点部署在专用服务器上。
注 2:InfluxDB Cluster 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口
8086
(HTTP API 的默认端口)。假设有两台服务器:
influxdb-data-01
和influxdb-data-02
。
端口: Data 节点通过端口 8088
、8089
和 8091
进行通信。
下载 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