InfluxDB 最新版本是 v2.x . 因官方开源版本不支持集群,有基于 v1.8.x 的InfluxDB开源集群方案 influxdb-cluster 。因此在集群环境中我们选用 InfluxDB v1.8.x 版本。
文档地址:https://github.com/chengshiwen/influxdb-cluster/wiki
集群主机
共计3台 InfluxDB 集群 8G x 3(1T硬盘)虚拟机。
序号 | IP | 角色 | Hostname |
---|---|---|---|
1 | 192.168.3.114 | Data、Meta | influxdb-01 |
2 | 192.168.3.115 | Data、Meta | influxdb-02 |
3 | 192.168.3.116 | Data、Meta | influxdb-03 |
分别设置三台主机的Hostname
主机 - 01
$ cat > /etc/hostname<<'EOF'
influxdb-01
EOF
主机 - 02
$ cat > /etc/hostname<<'EOF'
influxdb-02
EOF
主机 - 03
$ cat > /etc/hostname<<'EOF'
influxdb-03
EOF
安装 InfluxDB Cluster
我们建议使用 预构建版本 中的一个来安装 InfluxDB Cluster。
下载安装 InfluxDB Cluster
官方地址:https://github.com/chengshiwen/influxdb-cluster/releases
创建专用的数据存储目录
mkdir -p /etc/influxdb;
mkdir -p /data/influxdb/data;
mkdir -p /data/influxdb/meta;
mkdir -p /data/influxdb/wal;
mkdir -p /data/influxdb/logs;
下载安装最新的 InfluxDB Cluster 版本(选择适合的安装包,如:Linux x86_64).
注意:因GitHub下载较慢,可先网页下载到本地,上传到 /usr/local/src
目录下;
$ cd /usr/local/src && tar -xzf influxdb-cluster_1.8.10-c1.1.2_linux_amd64.tar.gz -C /usr/local
$ cd .. && mv influxdb-cluster-1.8.10-c1.1.2-1 influxdb-cluster
# 将配置文件拷贝到默认位置
$ cp -f influxdb-cluster/etc/influxdb/influxdb-meta.conf /etc/influxdb;
$ cp -f influxdb-cluster/etc/influxdb/influxdb.conf /etc/influxdb;
# 为提取的可执行二进制文件创建软连接,放入系统中$PATH
ln -s /usr/local/influxdb-cluster/usr/bin/influx /usr/bin/influx;
ln -s /usr/local/influxdb-cluster/usr/bin/influx_inspect /usr/bin/influx_inspect;
ln -s /usr/local/influxdb-cluster/usr/bin/influx_stress /usr/bin/influx_stress;
ln -s /usr/local/influxdb-cluster/usr/bin/influxd /usr/bin/influxd;
ln -s /usr/local/influxdb-cluster/usr/bin/influxd-ctl /usr/bin/influxd-ctl;
ln -s /usr/local/influxdb-cluster/usr/bin/influxd-meta /usr/bin/influxd-meta;
可参考 InfluxDB Enterprise 相关资料完成 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-01
,influxdb-02
和influxdb-03
。
端口: Meta 节点通过端口 8088
、8089
和 8091
进行通信。
一定要确保端口放开,或者直接关闭防火墙,否则后续一定会出现错误。
# CentOS
firewall-cmd --zone=public --add-port=8086/tcp --permanent;
firewall-cmd --zone=public --add-port=8088/tcp --permanent;
firewall-cmd --zone=public --add-port=8089/tcp --permanent;
firewall-cmd --zone=public --add-port=8091/tcp --permanent;
iptables -I INPUT -m tcp -p tcp --dport 8086 -j ACCEPT;
iptables -I INPUT -m tcp -p tcp --dport 8088 -j ACCEPT;
iptables -I INPUT -m tcp -p tcp --dport 8089 -j ACCEPT;
iptables -I INPUT -m tcp -p tcp --dport 8091 -j ACCEPT;
1. 为每个服务器添加适当的 DNS 条目
修改/etc文件(将服务器的主机名和IP地址添加到每个群集服务器的/etc/hosts 文件中)
特别说明,开源项目Wiki中使用了6个主机,这里只有3个主机
# <Meta_n_IP> <Hostname>
echo '192.168.3.114 influxdb-01' >>/etc/hosts;
echo '192.168.3.115 influxdb-02' >>/etc/hosts;
echo '192.168.3.116 influxdb-03' >>/etc/hosts;
注: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。
确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。
验证步骤:
在继续安装之前,请在每台服务器上验证其他服务器是否可解析。下面是一组使用
ping
的 shell 命令示例:
ping -qc 1 influxdb-01
ping -qc 1 influxdb-02
ping -qc 1 influxdb-03
2. 编辑配置文件
在 /etc/influxdb/influxdb-meta.conf
:
- 取消注释
hostname
并设置为 Meta 节点的完整主机名。
hostname="influxdb-0x"
注意: 如果您只想使用 IP 地址而不是主机名,必须将
hostname
设置为 IP 地址。
3. 启动 Meta 服务
分别在服务器 influxdb-01
、influxdb-02
和 influxdb-03
上启动 Meta 服务
/usr/bin/influxd-meta -config /etc/influxdb/influxdb-meta.conf
4. 设置 Meta 服务开机自启动
[root@local ~]# vi /lib/systemd/system/influxd-meta.service
脚本内容:
[Unit]
Description=InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案
Documentation=https://github.com/chengshiwen/influxdb-cluster/wiki
After=network.target
[Service]
User=root
ExecStart=/usr/bin/influxd-meta -config /etc/influxdb/influxdb-meta.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
LimitNOFILE=65536
TimeoutStopSec=20
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=3000
[Install]
WantedBy=multi-user.target
设置随机启动:
[root@local ~]# systemctl daemon-reload
[root@local ~]# systemctl disable influxd-meta.service
[root@local ~]# systemctl enable influxd-meta.service
[root@local ~]# systemctl start influxd-meta.service
[root@local ~]# systemctl status influxd-meta.service
[root@local ~]# systemctl stop influxd-meta.service
[root@local ~]# systemctl restart influxd-meta.service
[root@local ~]# journalctl -u influxd-meta.service
5. 将 Meta 节点加入集群
在一个且仅一个 Meta 节点上,加入所有 Meta 节点,包括它自己
。在我们的示例中,从 influxdb-01
运行:
influxd-ctl add-meta influxdb-01:8091;
influxd-ctl add-meta influxdb-02:8091;
influxd-ctl add-meta influxdb-03:8091;
预期的输出是:
Added meta node x at influxdb-0x:8091
验证步骤:
在任何 Meta 节点上发出以下命令:
influxd-ctl show
预期的输出是:
Data Nodes
ID TCP Address Version
Meta Nodes
ID TCP Address Version
1 influxdb-01:8091 1.8.10-c1.1.2
2 influxdb-02:8091 1.8.10-c1.1.2
3 influxdb-03:8091 1.8.10-c1.1.2
出错可以移除:
influxd-ctl remove-meta influxdb-01:8091;
influxd-ctl remove-meta influxdb-02:8091;
influxd-ctl remove-meta influxdb-03:8091;
Data 节点设置
0. 设置说明和要求
生产环境安装过程设置两个 Data 节点,每个 Data 节点在自己的服务器上运行。
InfluxDB Cluster 需要 至少两个 Data 节点 才能实现高可用性和冗余。
注 1:没有要求每个 Data 节点都运行在自己的服务器上。但是,最佳实践是将每个 Data 节点部署在专用服务器上。
注 2:InfluxDB Cluster 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口
8086
(HTTP API 的默认端口)。假设有两台服务器:
influxdb-01
和influxdb-02
。
端口: Data 节点通过端口 8088
、8089
和 8091
进行通信。
iptables -I INPUT -p tcp -m tcp --dport 8088 -j ACCEPT;
iptables -I INPUT -p tcp -m tcp --dport 8089 -j ACCEPT;
iptables -I INPUT -p tcp -m tcp --dport 8091 -j ACCEPT;
1. 为每个服务器添加适当的 DNS 条目
修改/etc文件(将服务器的主机名和IP地址添加到每个群集服务器的/etc/hosts 文件中)
前面已经修改过,这里不再修改。
注: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。
确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。
验证步骤:
在继续安装之前,请在每台服务器上验证其他服务器是否可解析。下面是一组使用
ping
的 shell 命令示例:ping -qc 1 influxdb-01
ping -qc 1 influxdb-02
2. 编辑配置文件
在 /etc/influxdb/influxdb.conf
:
- 取消注释
hostname
并设置为 Data 节点的完整主机名。
hostname="influxdb-0x"
注意: 如果您只想使用 IP 地址而不是主机名,必须将
hostname
设置为 IP 地址。
3. 启动 Data 服务
分别在服务器 influxdb-01
和 influxdb-02
上启动 Data 服务
/usr/bin/influxd -config /etc/influxdb/influxdb.conf
注: Data 节点在未被加入集群之前,出现
Failed to create storage
,failed to store statistics
或meta service unavailable
日志是正常情况。
4. 设置 Data 服务开机自启动
[root@local ~]# vi /lib/systemd/system/influxd.service
脚本内容:
[Unit]
Description=InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案
Documentation=https://github.com/chengshiwen/influxdb-cluster/wiki
After=network.target
[Service]
User=root
ExecStart=/usr/bin/influxd -config /etc/influxdb/influxdb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
LimitNOFILE=65536
TimeoutStopSec=20
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=3000
[Install]
WantedBy=multi-user.target
设置随机启动:
[root@local ~]# systemctl daemon-reload
[root@local ~]# systemctl disable influxd.service
[root@local ~]# systemctl enable influxd.service
[root@local ~]# systemctl start influxd.service
[root@local ~]# systemctl status influxd.service
[root@local ~]# systemctl stop influxd.service
[root@local ~]# systemctl restart influxd.service
[root@local ~]# journalctl -u influxd.service
5. 将 Data 节点加入集群
只有在添加全新节点时才应将 Data 节点加入集群,无论是在集群的初始创建期间还是在增加 Data 节点数量时。如果您要使用
influxd-ctl update-data
替换现有 Data 节点,请跳过本步骤的其余部分。
对要加入集群的每个 Data 节点运行一次且仅一次
的 add-data
命令:
influxd-ctl add-data influxdb-01:8088
influxd-ctl add-data influxdb-02:8088
influxd-ctl add-data influxdb-03:8088
预期的输出是:
Added data node y at influxdb-0x:8088
验证步骤:
在任何 Meta 节点上发出以下命令:
influxd-ctl show
预期的输出是:Data Nodes
ID TCP Address Version
4 influxdb-01:8088 1.8.10-c1.1.2
5 influxdb-02:8088 1.8.10-c1.1.2Meta Nodes
ID TCP Address Version
1 influxdb-01:8091 1.8.10-c1.1.2
2 influxdb-02:8091 1.8.10-c1.1.2
3 influxdb-03:8091 1.8.10-c1.1.2
出错可以移除:
influxd-ctl remove-data influxdb-01:8091;
influxd-ctl remove-data influxdb-02:8091;
influxd-ctl remove-data influxdb-03:8091;
配置
配置集群
请参考
注: 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
最后编辑:Jeebiz 更新时间:2024-02-26 11:18