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 节点:
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
目录。
创立 database
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'"
Kubernetes & Helm Chart
拜访:https://github.com/influxtsdb…
下载 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 节点设置
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 节点的残缺主机名。
hostname="influxdb-meta-0x"
留神: 如果您只想应用 IP 地址而不是主机名,必须将
hostname
设置为 IP 地址。
3. 启动 Meta 服务
别离在服务器 influxdb-meta-01
、influxdb-meta-02
和 influxdb-meta-03
上启动 Meta 服务
/usr/bin/influxd-meta -config /etc/influxdb/influxdb-meta.conf
4. 将 Meta 节点退出集群
在一个且仅一个 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
预期的输入是:
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.10-c1.1.1 2 influxdb-meta-02:8091 1.8.10-c1.1.1 3 influxdb-meta-03:8091 1.8.10-c1.1.1
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 节点的残缺主机名。
hostname="influxdb-data-0x"
留神: 如果您只想应用 IP 地址而不是主机名,必须将
hostname
设置为 IP 地址。
3. 启动 Data 服务
别离在服务器 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
日志是失常状况。
4. 将 Data 节点退出集群
只有在增加全新节点时才应将 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
预期的输入是:
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.10-c1.1.1 5 influxdb-data-02:8088 1.8.10-c1.1.1 Meta Nodes ========== ID TCP Address Version 1 influxdb-meta-01:8091 1.8.10-c1.1.1 2 influxdb-meta-02:8091 1.8.10-c1.1.1 3 influxdb-meta-03:8091 1.8.10-c1.1.1
配置
配置集群
请参考
- 配置 InfluxDB 集群
- 配置 InfluxDB 集群 Data 节点
- 配置 InfluxDB 集群 Meta 节点
注 : InfluxDB Cluster 的配置项简直和 InfluxDB Enterprise 齐全一样,
惟一的差异是,InfluxDB Cluster 应用[coordinator]
配置项, 而 InfluxDB Enterprise 应用[cluster]
。
尚未反对的配置项
相比于 InfluxDB Enterprise,下列配置我的项目前尚未反对,将来将逐步失去反对。
Data 节点:
[coordinator]
shard-reader-timeout
[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
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