InfluxDB Cluster高可用部署实战指南
1. InfluxDB Cluster高可用架构解析
第一次接触InfluxDB Cluster时,很多人会疑惑它和单机版有什么区别。简单来说,Cluster版本就像是把多个单机版InfluxDB用"绳子"绑在一起,让它们能够协同工作。这根"绳子"就是集群的元数据服务(Meta Service),它负责记录哪些数据存放在哪个节点上。
高可用性的核心在于冗余设计。想象你有个重要文件,如果只存在一个U盘里,U盘丢了文件就没了。但如果你同时拷贝到三个U盘,就算丢一个也不影响。InfluxDB Cluster也是这个原理,通过至少三个Meta节点和两个Data节点的配置,确保任何单台机器宕机时,系统仍能正常运行。
关键组件分工很明确:
- Meta节点:相当于集群的"大脑",存储分片位置、用户权限等元数据。建议用配置一般的服务器即可,因为它的数据量不大但要求高可用。
- Data节点:真正的"苦力",负责存储时序数据和查询计算。需要根据数据量配置高性能服务器,特别是SSD硬盘对写入性能提升明显。
我在实际部署中发现,很多新手容易混淆端口用途。这里有个记忆技巧:
- 8091是Meta节点的API端口(好比管理后台入口)
- 8089是Meta节点间的私密热线(内部通信专用)
- 8088是Data节点的内部通讯端口
- 8086是Data节点对外的服务端口(应用连接这个)
2. 部署前的关键准备工作
2.1 硬件与网络规划
去年给某物联网平台部署集群时,曾因网络延迟导致同步异常。后来我们用ping测试所有节点间延迟,确保都在2ms以内。建议提前做好这些检查:
-
服务器规格:
- Meta节点:2核4GB起步(实测3节点集群每小时处理约50MB元数据)
- Data节点:根据数据量配置,通常8核32GB起步,需要SSD存储
-
网络要求:
# 测试节点间延迟(所有节点互相测试) ping -c 10 node2 # 测试带宽(在node1执行) iperf -s # 在node2执行 iperf -c node1 -t 20 -
磁盘规划:
# 建议的目录结构 mkdir -p /influx/{meta,data,wal,hh} chown -R influxdb:influxdb /influx- data目录存放TSM引擎数据文件
- wal目录存放预写日志
- hh目录用于 hinted handoff 临时存储
2.2 软件版本选择
官方社区版和企业版功能差异较大,我们选择的是chengshiwen维护的开源集群版。这里有个坑要注意:v1.8.10-c1.1.2存在meta节点重启后无法自动加入集群的问题,推荐使用v1.8.10-c1.2.0修复版。
下载安装包时注意架构匹配:
# AMD64架构
wget https://github.com/chengshiwen/influxdb-cluster/releases/download/v1.8.10-c1.2.0/influxdb-cluster_1.8.10-c1.2.0_linux_amd64.tar.gz
# ARM架构
wget https://github.com/chengshiwen/influxdb-cluster/releases/download/v1.8.10-c1.2.0/influxdb-cluster_1.8.10-c1.2.0_linux_arm64.tar.gz
3. Meta节点集群搭建实战
3.1 基础配置
三节点是最小高可用配置,这里以node1、node2、node3为例。每台机器都需要修改配置文件:
# influxdb-meta.conf关键配置
bind-address = ":8091"
hostname = "node1" # 各节点修改为对应主机名
[meta]
dir = "/influx/meta"
bind-address = ":8089"
http-bind-address = ":8091"
启动命令建议用systemd管理:
# /etc/systemd/system/influxdb-meta.service
[Unit]
Description=InfluxDB Meta Node
[Service]
ExecStart=/usr/bin/influxd-meta -config /etc/influxdb/influxdb-meta.conf
Restart=always
[Install]
WantedBy=multi-user.target
3.2 集群初始化
在node1上执行初始化(仅第一次需要):
influxd-ctl add-meta node1:8091
influxd-ctl add-meta node2:8091
influxd-ctl add-meta node3:8091
验证集群状态时,常见问题有:
- 端口未开放:检查防火墙
firewall-cmd --list-ports - 主机名解析失败:确保/etc/hosts包含所有节点IP映射
- 时间不同步:安装ntpdate同步时间
4. Data节点集群配置详解
4.1 多节点部署
Data节点建议至少部署2个实现冗余。配置文件关键参数:
# influxdb.conf
bind-address = ":8088"
hostname = "node1"
[http]
bind-address = ":8086"
auth-enabled = true # 建议开启认证
[data]
dir = "/influx/data"
wal-dir = "/influx/wal"
[hinted-handoff]
dir = "/influx/hh"
启动后需要将节点加入集群:
influxd-ctl add-data node1:8088
influxd-ctl add-data node2:8088
4.2 权限控制实践
生产环境一定要配置JWT认证。分享一个自动化脚本生成token:
import jwt
import time
secret = "your_shared_secret"
payload = {
"username": "admin",
"exp": int(time.time()) + 3600 # 1小时过期
}
token = jwt.encode(payload, secret, algorithm="HS256")
print(token.decode())
测试API访问:
curl -G "http://node1:8086/query" \
--data-urlencode "q=SHOW DATABASES" \
--header "Authorization: Bearer $TOKEN"
5. 负载均衡与生产调优
5.1 Nginx负载均衡配置
InfluxDB Cluster本身没有LB功能,推荐用Nginx做四层负载:
upstream influx_backend {
least_conn; # 最少连接算法
server node1:8086 max_fails=3 fail_timeout=30s;
server node2:8086 max_fails=3 fail_timeout=30s;
check interval=3000 rise=2 fall=3 timeout=1000;
}
server {
listen 8086;
location / {
proxy_pass http://influx_backend;
proxy_set_header Host $host;
}
}
5.2 性能调优经验
根据线上运行经验,这些参数值得关注:
-
写入优化:
[data] cache-snapshot-memory-size = "256m" # 默认16MB太小 series-id-set-cache-size = 100 -
查询优化:
[coordinator] query-timeout = "300s" # 复杂查询超时时间 max-concurrent-queries = 50 -
监控指标:
# 查看写入性能 SELECT * FROM "_internal".."write" WHERE time > now() - 1h # 查看查询耗时 SELECT * FROM "_internal".."queryExecutor" WHERE time > now() - 1h
曾经处理过一个案例:某客户写入速度突然下降,最后发现是wal目录所在磁盘空间不足。现在我们会定期检查这些关键指标:
- 磁盘剩余空间
- 内存swap使用率
- 网络重传率
- 节点间时钟偏移
6. 常见故障处理手册
6.1 节点离线处理
当某个Data节点宕机时,集群会自动启用hinted handoff机制。恢复步骤:
- 检查hh目录积压数据:
du -sh /influx/hh - 启动节点后观察日志:
journalctl -u influxdb -f - 强制重新同步(必要时):
influxd-ctl update-data node1:8088
6.2 脑裂问题处理
Meta节点网络分区可能导致脑裂。去年遇到一次,解决方案是:
- 停用所有节点
- 在多数派节点执行:
influxd-meta -config influxdb-meta.conf -force-new-cluster - 重新加入其他节点
重要数据操作前,建议先备份meta目录:
# 在线备份
influxd-ctl backup /backup/influx-meta
7. 生产环境最佳实践
经过多个项目验证,这些经验值得分享:
-
容量规划:
- 每百万数据点约占用1.5MB磁盘空间
- 写入吞吐量建议控制在5万点/秒/节点以内
-
监控方案:
[monitor] store-enabled = true store-database = "_internal" store-interval = "10s" -
备份策略:
# 全量备份 influxd backup -portable -host node1:8088 /backup/full # 增量备份 influxd backup -portable -host node1:8088 -start 2023-01-01T00:00:00Z /backup/incr -
升级注意事项:
- 先升级Meta节点,再升级Data节点
- 每个节点升级后观察30分钟再处理下一个
- 保留回滚所需的旧版本二进制文件
有次升级差点翻车,幸亏提前做了这几点:
- 在测试环境验证过升级流程
- 备份了所有meta和data目录
- 选择业务低峰期操作
- 准备了回滚脚本
更多推荐
所有评论(0)