-
Notifications
You must be signed in to change notification settings - Fork 148
Home
InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案
🎉🎉 InfluxDB Cluster 现在已成为华为云官方推荐的解决方案,请参考 华为云快速搭建高可用InfluxDB集群 和 华为云 HAIC 解决方案文档
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。特别地,注意
请参考:
- InfluxDB 设计理念和权衡 / InfluxDB design insights and tradeoffs
- InfluxDB 文件系统布局 / InfluxDB file system layout
下载 docker-compose.yml,然后通过 docker-compose
启动 3 个 Meta 节点和 2 个 Data 节点:
docker-compose up -d
docker exec -it influxdb-meta-01 bash
influxd-ctl add-meta influxdb-meta-01:8091
influxd-ctl add-meta influxdb-meta-02:8091
influxd-ctl add-meta influxdb-meta-03:8091
influxd-ctl add-data influxdb-data-01:8088
influxd-ctl add-data influxdb-data-02:8088
influxd-ctl show
停止并移除它们,当它们不再被使用时:
docker-compose down -v
注: 要持久化容器中的数据,请务必挂载所有 Meta 和 Data 节点的
/etc/influxdb
和/var/lib/influxdb
目录。
curl -XPOST "http://influxdb-data-01:8086/query" --data-urlencode "q=CREATE DATABASE mydb WITH REPLICATION 2"
curl -XPOST "http://influxdb-data-01:8086/write?db=mydb" \
-d 'cpu,host=server01,region=uswest load=42 1434055562000000000'
curl -XPOST "http://influxdb-data-02:8086/write?db=mydb&consistency=all" \
-d 'cpu,host=server02,region=uswest load=78 1434055562000000000'
curl -XPOST "http://influxdb-data-02:8086/write?db=mydb&consistency=quorum" \
-d 'cpu,host=server03,region=useast load=15.4 1434055562000000000'
注:
consistency=[any,one,quorum,all]
设置点的写一致性。如果没有指定,consistency
默认为one
。有关每个一致性选项的详细说明,请参阅 写一致性 / Write consistency。
any
: 一旦任何节点写入成功,或者接收节点已将数据写入其 hinted handoff 队列,就立即向客户端返回成功。
one
: 一旦任何节点写入成功,则立即向客户端返回成功,如果只是写入到 hinted handoff 队列中则不会返回。
quorum
: 当大多数节点(大于副本因子半数)返回成功时返回成功。此选项仅在副本因子大于 2 时才有用,否则等效于all
。
all
: 仅当所有节点都返回成功时才返回成功。
curl -G "http://influxdb-data-02:8086/query?pretty=true" --data-urlencode "db=mydb" \
--data-urlencode "q=SELECT * FROM cpu WHERE host='server01' AND time < now() - 1d"
curl -G "http://influxdb-data-02:8086/query?pretty=true" --data-urlencode "db=mydb" \
--data-urlencode "q=SELECT mean(load) FROM cpu WHERE region='uswest'"
访问:https://github.com/influxtsdb/helm-charts/tree/master/charts/influxdb-cluster
下载 InfluxDB Cluster Helm chart,执行:
helm install influxdb-cluster ./influxdb-cluster
将会启动 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 节点,每个 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
进行通信。
注: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。
确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。
验证步骤:
在继续安装之前,请在 Meta 和 Data 每台服务器上验证其他服务器是否可解析。下面是一组使用
ping
的 shell 命令示例:ping -qc 1 influxdb-meta-01 ping -qc 1 influxdb-meta-02 ping -qc 1 influxdb-meta-03
在 /etc/influxdb/influxdb-meta.conf
:
- 取消注释
hostname
并设置为 Meta 节点的完整主机名。
hostname="influxdb-meta-0x"
注意: 如果您只想使用 IP 地址而不是主机名,必须将
hostname
设置为 IP 地址。
分别在服务器 influxdb-meta-01
、influxdb-meta-02
和 influxdb-meta-03
上启动 Meta 服务
/usr/bin/influxd-meta -config /etc/influxdb/influxdb-meta.conf
在一个且仅一个 Meta 节点上,加入所有 Meta 节点,包括它自己。在我们的示例中,从 influxdb-meta-01
运行:
influxd-ctl add-meta influxdb-meta-01:8091
influxd-ctl add-meta influxdb-meta-02:8091
influxd-ctl add-meta influxdb-meta-03:8091
注意: 如果您只想使用 IP 地址而不是主机名,则应该添加
-bind
选项,指定要连接的 Meta 节点的绑定 HTTP 地址(默认值为localhost:8091
),执行:influxd-ctl -bind meta-01-ip:8091 add-meta meta-01-ip:8091 influxd-ctl -bind meta-01-ip:8091 add-meta meta-02-ip:8091 influxd-ctl -bind meta-01-ip:8091 add-meta meta-03-ip:8091 influxd-ctl -bind meta-01-ip:8091 show
预期的输出是:
Added meta node x at influxdb-meta-0x:8091
验证步骤:
在任何 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 节点,每个 Data 节点在自己的服务器上运行。
InfluxDB Cluster 需要 至少两个 Data 节点 才能实现高可用性和冗余。
注 1:没有要求每个 Data 节点都运行在自己的服务器上。但是,最佳实践是将每个 Data 节点部署在专用服务器上。
注 2:InfluxDB Cluster 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口
8086
(HTTP API 的默认端口)。假设有两台服务器:
influxdb-data-01
和influxdb-data-02
。
端口: Data 节点通过端口 8088
、8089
和 8091
进行通信。
注: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。
确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。
验证步骤:
在继续安装之前,请在 Meta 和 Data 每台服务器上验证其他服务器是否可解析。下面是一组使用
ping
的 shell 命令示例:ping -qc 1 influxdb-data-01 ping -qc 1 influxdb-data-02
在 /etc/influxdb/influxdb.conf
:
- 取消注释
hostname
并设置为 Data 节点的完整主机名。
hostname="influxdb-data-0x"
注意: 如果您只想使用 IP 地址而不是主机名,必须将
hostname
设置为 IP 地址。
分别在服务器 influxdb-data-01
和 influxdb-data-02
上启动 Data 服务
/usr/bin/influxd -config /etc/influxdb/influxdb.conf
注: Data 节点在未被加入集群之前,出现
Failed to create storage
,failed to store statistics
或meta service unavailable
日志是正常情况。
只有在添加全新节点时才应将 Data 节点加入集群,无论是在集群的初始创建期间还是在增加 Data 节点数量时。 如果您要使用
influxd-ctl update-data
替换现有 Data 节点,请跳过本步骤的其余部分。
对要加入集群的每个 Data 节点运行一次且仅一次的 add-data
命令:
influxd-ctl add-data influxdb-data-01:8088
influxd-ctl add-data influxdb-data-02:8088
注意: 如果您在 Data 节点上,则应该添加
-bind
选项,指定要连接的 Meta 节点的绑定地址(默认值为localhost:8091
),执行:influxd-ctl -bind influxdb-meta-01:8091 add-data influxdb-data-01:8088 influxd-ctl -bind influxdb-meta-01:8091 add-data influxdb-data-02:8088 influxd-ctl -bind influxdb-meta-01:8091 show
注意: 如果您只想使用 IP 地址而不是主机名,则应该添加
-bind
选项,指定要连接的 Meta 节点的绑定 HTTP 地址(默认值为localhost:8091
),执行:influxd-ctl -bind meta-01-ip:8091 add-data data-01-ip:8088 influxd-ctl -bind meta-01-ip:8091 add-data data-02-ip:8088 influxd-ctl -bind meta-01-ip:8091 show
预期的输出是:
Added data node y at influxdb-data-0x:8088
验证步骤:
在任何 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 Cluster 的配置项几乎和 InfluxDB Enterprise 完全一样, 唯一的差别是,InfluxDB Cluster 使用
[coordinator]
配置项, 而 InfluxDB Enterprise 使用[cluster]
请参考 配置重点设置项
相比于 InfluxDB Enterprise,目前下列配置项尚未支持,未来将逐渐得到支持
Data 节点:
[monitor]
remote-collect-interval
[hinted-handoff]
retry-concurrency
batch-size
[anti-entropy]
max-fetch
max-sync
auto-repair-missing
Meta 节点:
[meta]
ldap-allowed
consensus-timeout
请参考: Influx Query Language (InfluxQL)
请参考: Flux data scripting language
请参考: Write line protocols in InfluxDB
请参考: /query HTTP endpoint
请参考: /write HTTP endpoint
请参考: /api/v2/query HTTP endpoint
请参考: /api/v2/write HTTP endpoint
- Chronograf: Chronograf 是 InfluxData 的开源 Web 应用程序
- InfluxDB Admin: 早期 InfluxDB 的 Web Admin Interface, 它从 InfluxDB v1.3 开始被移除
- Time Series Admin: InfluxDB 数据库的管理面板和查询界面(Electron 应用程序 / Docker 容器)
- influxdb-ui: 一个 InfluxDB 的简单 UI
- InfluxDB Studio: InfluxDB Studio 是 InfluxDB 时序数据库的桌面 UI 管理工具
- Time Series Admin: InfluxDB 数据库的管理面板和查询界面(Electron 应用程序 / Docker 容器)
- InfluxDB WorkBench: InfluxDB WorkBench 是一个 InfluxDB GUI 工具,可在 Windows、Mac OS X 和 Unix/Linux 上运行
- InfluxDB-GUI: 免费开源的 InfluxDB GUI,为用户提供直观、易用的数据库管理和操作体验
- InfluxGUI: 用于调试和验证 Influx 查询的独立 InfluxDB GUI
- Influxdb GUI: 基于 Tauri 开发的 Influxdb GUI 工具
请参考: 迁移 InfluxDB OSS 到 InfluxDB Cluster / Migrate InfluxDB OSS instances to InfluxDB Cluster
请参考: 使用 InfluxDB API 写入数据 / Write data with the InfluxDB API
请参考: 使用 InfluxDB API 查询数据 / Query data with the InfluxDB API
请参考: 对 InfluxDB 集群的请求进行身份验证 / Authenticate requests to InfluxDB Cluster
请参考: 降采样及保留数据 / Downsample and retain data
请参考: 硬件数量评估指南 / Hardware sizing guidelines
请参考: 计算查询中的百分比 / Calculate percentages in a query
请参考: 配置认证 / Configure authentication
请参考: 配置 HTTPS/TLS / Configure HTTPS over TLS
请参考: 配置 TCP 和 UDP 端口 / Configure TCP and UDP ports used in InfluxDB Cluster
注意:有限支持,
influxd-ctl
已经支持 13 个命令,剩余 7 个命令backup
,restore
,copy-shard-status
,kill-copy-shard
,node-labels
,entropy
,ldap
尚不支持
请参考: 管理集群
请参考: 更换节点 / Replace InfluxDB Cluster meta nodes and data nodes
请参考: 重新平衡集群 / Rebalance InfluxDB Cluster
注意:尚不支持
请参考: 管理用户和权限 / Manage users and permissions
请参考: 管理订阅 / Manage subscriptions in InfluxDB Cluster
请参考: 重命名主机 / Rename hosts in InfluxDB Cluster
注意:尚不支持
请参考: 使用反熵(Anti-entropy)服务 / Use Anti-Entropy service in InfluxDB Cluster
注意:有限支持,备份和还原 (
influxd-ctl backup
,influxd-ctl restore
) 尚不支持
请参考: 备份和还原 / Back up and restore InfluxDB Cluster
注意:导出和导入已支持 (
influx_inspect export
,influx -import
)
请参考: 导出和导入数据 / Exporting and importing data
请参考: 升级集群 / Upgrade InfluxDB Cluster
请参考: 日志和跟踪 / Log and trace InfluxDB Cluster operations
请参考: 工具 / InfluxDB Cluster tools (influx, influxd, influxd-ctl, influx_inspect)
请参考: 诊断 / Use InfluxQL for diagnostics
请参考: 疑难解答 / Troubleshoot InfluxDB Cluster
请参考: 发版说明
注意:为什么存在 v1.8.11?
因为 v1.8.10 是 1.8 的最后一个版本,已经长久不再维护。 v1.8.11 版本是在 v1.8.10 基础上,应用 1.9 至 1.11 版本中重要的 bug 修复补丁得到,commits 详见 https://github.com/chengshiwen/influxdb/compare/v1.8.10...1.8.11
- 备份和还原:
influxd-ctl backup
和influxd-ctl restore
支持 - Copy shard:
influxd-ctl copy-shard-status
和influxd-ctl kill-copy-shard
支持 - Hinted handoff:
retry-concurrency
和batch-size
支持,提升 hinted handoff 重写性能
- 节点标签:
influxd-ctl node-labels
支持 - Anti-Entropy: Anti-Entropy 服务和
influxd-ctl entropy
支持 - LDAP:
influxd-ctl ldap
支持 - 用户和权限
- 升级上游到 v1.11.7,同步 InfluxDB Enterprise 1.11
项目 | Stars | 描述 | 评价 |
---|---|---|---|
chengshiwen/influxdb-cluster | Open Source Alternative to InfluxDB Enterprise | 几乎与 InfluxDB Enterprise 一模一样,基于最新 InfluxDB 1.8.10,高质量且精简的代码、显著很少的 bugs,易于维护并保持与 InfluxDB 上游代码同步升级,生产环境已就绪 | |
influxdata/influxdb-relay | Service to replicate InfluxDB data for high availability | 官方出品,已长期不维护,缺少很多功能,例如不支持数据分片(见注 1) | |
shell909090/influx-proxy | High availability proxy layer to InfluxDB by InfluxData | 饿了么出品,受 influxdb-relay 启发,已长期不维护,缺少一些功能(见注 1) | |
chengshiwen/influx-proxy | InfluxDB Proxy with High Availability and Consistent Hash | Forked 于 shell909090/influx-proxy,支持更多功能,具有高可用性、一致性哈希(见注 1),生产环境已就绪 | |
freetsdb/freetsdb | Open-Source replacement for InfluxDB Enterprise | 低质量且复杂的代码(见注 2),bugs 众多,基于 InfluxDB 1.7.4,只实现了 InfluxDB Cluster 特性的 10%,难以维护,无法保持与 InfluxDB 上游代码同步升级,生产环境尚未就绪 | |
spring-avengers/influx-proxy | A proxy for InfluxDB like codis | 已长期不维护,很多功能缺失,生产环境尚未就绪 | |
derek0377/influxdb-cluster | InfluxDB cluster proxy like codis | 已长期不维护,很多功能缺失,生产环境尚未就绪 | |
jasonjoo2010/chronus | InfluxDB cluster based on version 1.8.3 | 程序设计和行为不同于 InfluxDB Enterprise,很多功能缺失,生产环境尚未就绪 |
注 1: shell909090/influx-proxy/issues/111
注 2: freetsdb/freetsdb/issues/7, freetsdb/freetsdb/issues/8, freetsdb/freetsdb/issues/9
- Email: [email protected]
- GitHub Issues
-
Slack: 加入 Slack 并在
#general
频道中交流 -
钉钉群:
41579095
-
微信群: 直接扫码进入微信群,或者添加助手(微信号
shiwen-asst
)、助手将添加您到微信群