InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 集群的开源替代方案。完全依照 InfluxDB Enterprise 实现,基于 InfluxDB v1.8.10 开发,支持集群(数据分片)、高可用(容错)、数据一致性(Raft,Hinted Handoff)、配套工具(扩缩容、数据同步等)等特性,Telegraf、Chronograf、Kapacitor 也完全支持,生产环境已就绪
InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案
InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案
- GitHub:chengshiwen/influxdb-cluster
- Wiki 文档:chengshiwen/influxdb-cluster/wiki
- 下载地址:chengshiwen/influxdb-cluster/releases
目录
- 简介
- 特性
- 架构
- 概念
- Docker 快速开始
- Kubernetes & Helm Chart
- 安装
- 配置
- HTTP 接口
- 管理指南
简介
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 节点通过 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 节点通信。
概念
集群
请参考: 集群 / Clustering。特别地,注意
- 数据存储位置 / Where data lives
- 最佳服务器数量 / Optimal server counts
- 在集群中写入 / Writes in a cluster: Shard groups, Write consistency, Hinted handoff
- 在集群中查询 / Queries in a cluster
术语
请参考: 术语 / Glossary。特别地,注意
- 副本因子 / replication factor
Docker 快速开始
使用 docker compose 启动集群
下载 docker-compose.yml,然后通过 docker-compose 启动 3 个 Meta 节点和 2 个 Data 节点:
停止并移除它们,当它们不再被使用时:
注: 要持久化容器中的数据,请务必挂载所有 Meta 和 Data 节点的 /etc/influxdb 和 /var/lib/influxdb 目录。
创建 database
写入一些数据
注: consistency=[any,one,quorum,all] 设置点的写一致性。如果没有指定,consistency 默认为 one。有关每个一致性选项的详细说明,请参阅 写一致性 / Write consistency。
any: 一旦任何节点写入成功,或者接收节点已将数据写入其 hinted handoff 队列,就立即向客户端返回成功。
one: 一旦任何节点写入成功,则立即向客户端返回成功,如果只是写入到 hinted handoff 队列中则不会返回。
quorum: 当大多数节点(大于副本因子半数)返回成功时返回成功。此选项仅在副本因子大于 2 时才有用,否则等效于 all。
all: 仅当所有节点都返回成功时才返回成功。
查询数据
分析数据
Kubernetes & Helm Chart
访问:https://github.com/influxtsdb/helm-charts/tree/master/charts/influxdb-cluster
下载 InfluxDB Cluster Helm chart,执行:
将会启动 1 个名为 influxdb-cluster 的 release。
注: 要持久化容器中的数据,请务必挂载所有 Meta 和 Data 节点的 /var/lib/influxdb 目录至 PVCs。
安装
我们建议使用 预构建版本 中的一个来安装 InfluxDB Cluster。
完成以下步骤以在您自己的环境中安装 InfluxDB 集群:
注: InfluxDB Cluster 的安装与 InfluxDB Enterprise 的安装完全相同,可以参考 安装 InfluxDB Enterprise 集群 / Install an InfluxDB Enterprise cluster。
Meta 节点设置
0. 要求
生产环境安装过程设置三个 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 进行通信。
1. 为每个服务器添加适当的 DNS 条目
注: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。
确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。
验证步骤:
在继续安装之前,请在每台服务器上验证其他服务器是否可解析。下面是一组使用 ping 的 shell 命令示例:
ping -qc 1 influxdb-meta-01 ping -qc 1 influxdb-meta-02 ping -qc 1 influxdb-meta-03
2. 编辑配置文件
在 /etc/influxdb/influxdb-meta.conf:
- 取消注释 hostname 并设置为 Meta 节点的完整主机名。
注意: 如果您只想使用 IP 地址而不是主机名,必须将 hostname 设置为 IP 地址。
3. 启动 Meta 服务
分别在服务器 influxdb-meta-01、influxdb-meta-02 和 influxdb-meta-03 上启动 Meta 服务
4. 将 Meta 节点加入集群
在一个且仅一个 Meta 节点上,加入所有 Meta 节点,包括它自己。在我们的示例中,从 influxdb-meta-01 运行:
预期的输出是:
验证步骤:
在任何 Meta 节点上发出以下命令:
influxd-ctl show
预期的输出是:
Data Nodes ========== ID TCP Address Version Meta Nodes ========== ID TCP Address Version 1 influxdb-meta-01:8091 1.8.11-c1.2.0 2 influxdb-meta-02:8091 1.8.11-c1.2.0 3 influxdb-meta-03:8091 1.8.11-c1.2.0
Data 节点设置
0. 要求
生产环境安装过程设置两个 Data 节点,每个 Data 节点在自己的服务器上运行。
InfluxDB Cluster 需要 至少两个 Data 节点 才能实现高可用性和冗余。
注 1:没有要求每个 Data 节点都运行在自己的服务器上。但是,最佳实践是将每个 Data 节点部署在专用服务器上。
注 2:InfluxDB Cluster 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口 8086(HTTP API 的默认端口)。
假设有两台服务器:influxdb-data-01 和 influxdb-data-02。
端口: Data 节点通过端口 8088、8089 和 8091 进行通信。
1. 为每个服务器添加适当的 DNS 条目
注: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。
确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。
验证步骤:
在继续安装之前,请在每台服务器上验证其他服务器是否可解析。下面是一组使用 ping 的 shell 命令示例:
ping -qc 1 influxdb-data-01 ping -qc 1 influxdb-data-02
2. 编辑配置文件
在 /etc/influxdb/influxdb.conf:
- 取消注释 hostname 并设置为 Data 节点的完整主机名。
注意: 如果您只想使用 IP 地址而不是主机名,必须将 hostname 设置为 IP 地址。
3. 启动 Data 服务
分别在服务器 influxdb-data-01 和 influxdb-data-02 上启动 Data 服务
注: Data 节点在未被加入集群之前,出现 Failed to create storage,failed to store statistics 或 meta service unavailable 日志是正常情况。
4. 将 Data 节点加入集群
只有在添加全新节点时才应将 Data 节点加入集群,无论是在集群的初始创建期间还是在增加 Data 节点数量时。 如果您要使用 influxd-ctl update-data 替换现有 Data 节点,请跳过本步骤的其余部分。
对要加入集群的每个 Data 节点运行一次且仅一次的 add-data 命令:
预期的输出是:
验证步骤:
在任何 Meta 节点上发出以下命令:
influxd-ctl show
预期的输出是:
Data Nodes ========== ID TCP Address Version 4 influxdb-data-01:8088 1.8.11-c1.2.0 5 influxdb-data-02:8088 1.8.11-c1.2.0 Meta Nodes ========== ID TCP Address Version 1 influxdb-meta-01:8091 1.8.11-c1.2.0 2 influxdb-meta-02:8091 1.8.11-c1.2.0 3 influxdb-meta-03:8091 1.8.11-c1.2.0
配置
配置集群
请参考
- 配置 InfluxDB 集群
- 配置 InfluxDB 集群 Data 节点
- 配置 InfluxDB 集群 Meta 节点
注: InfluxDB Cluster 的配置项几乎和 InfluxDB Enterprise 完全一样, 唯一的差别是,InfluxDB Cluster 使用 [coordinator] 配置项, 而 InfluxDB Enterprise 使用 [cluster]。
尚未支持的配置项
相比于 InfluxDB Enterprise,下列配置项目前尚未支持,未来将逐渐得到支持。
Data 节点:
Meta 节点:
HTTP 接口
Data 节点 HTTP 接口
/query HTTP 接口
请参考: /query HTTP endpoint
/write HTTP 接口
请参考: /write HTTP endpoint
/api/v2/query HTTP 接口
请参考: /api/v2/query/ HTTP endpoint
/api/v2/write HTTP 接口
请参考: /api/v2/write/ HTTP endpoint
管理指南
迁移 InfluxDB OSS 到 InfluxDB Cluster
请参考: 迁移 InfluxDB OSS 到 InfluxDB Cluster / Migrate InfluxDB OSS instances to InfluxDB Cluster clusters
更换集群节点
请参考: 更换集群节点 / Replace InfluxDB Cluster cluster meta nodes and data nodes
重新平衡集群
请参考: 重新平衡集群 / Rebalance InfluxDB Cluster clusters
硬件数量评估指南
请参考: 硬件数量评估指南 / Hardware sizing guidelines
开启 HTTPS
请参考: 开启 HTTPS / Enable HTTPS for InfluxDB Cluster
管理安全
请参考: 管理安全 / Manage security in InfluxDB Cluster
管理集群
注意:有限支持,influxd-ctl 已经支持 13 个命令,剩余 6 个命令 backup, restore, copy-shard-status, kill-copy-shard, entropy, ldap 尚不支持
请参考: 管理集群
使用反熵(Anti-entropy)服务
注意:尚不支持
请参考: 使用反熵(Anti-entropy)服务 / Use Anti-Entropy service in InfluxDB Cluster
备份和还原
注意:有限支持,备份和还原 (influxd-ctl backup, influxd-ctl restore) 尚不支持
请参考: 备份和还原 / Back up and restore InfluxDB Cluster clusters
注意:导出和导入已支持 (influx_inspect export, influx -import)
请参考: 导出和导入数据 / Exporting and importing data
日志和跟踪
请参考: 日志和跟踪 / Log and trace InfluxDB Cluster operations
重命名主机
请参考: 重命名主机 / Rename hosts in InfluxDB Cluster