运维与排错
自动故障转移
Writer 故障转移
当 Primary Writer 不可用时,集群自动将 Standby Writer 提升为 Primary:
- Raft Leader 定期检查 Primary Writer 健康(每 5 秒)
- 连续 3 次失败 → 触发故障转移
- 选择 Standby Writer(优先)或任意健康 Writer → 提升为 Primary
- 冷却期 60 秒内不会重复切换
Compactor 故障转移
- Leader 每 10 秒检查 Compactor 健康
- 不可用时,优先选择健康
compactor节点,其次writer节点 - 新节点自动接管压缩调度器
配置
[cluster]
failover_enabled = true
failover_timeout = 30 # 故障转移超时(秒)
failover_cooldown = 60 # 冷却时间(秒)
扩容 Reader
Reader 节点可以随时加入,无需重启现有节点:
- 按照 Reader 配置模板准备新节点
- 设置
seeds指向任意现有 Writer 的 coordinator 地址 - 启动新节点——自动加入集群并开始接收查询请求
缩容/移除节点
# 移除已死节点
curl -X DELETE http://writer:8000/api/v1/cluster/nodes/dead-node-id \
-H "Authorization: Bearer $ADMIN_TOKEN"
手动故障转移
# 触发 Writer 故障转移
curl -X POST http://writer:8000/api/v1/cluster/failover/writer \
-H "Authorization: Bearer $ADMIN_TOKEN"
查看 Raft 状态
curl http://writer:8000/api/v1/cluster | jq '.raft'
返回示例:
{
"enabled": true,
"is_leader": true,
"leader_addr": "10.0.1.10:9200",
"leader_id": "writer-01",
"state": "Leader",
"stats": {
"num_peers": "2",
"applied_index": "15420",
"last_snapshot_index": "10000"
}
}
故障排除
节点无法加入集群:检查 cluster.name 是否一致,shared_secret 是否匹配,种子节点 coordinator 端口是否可达。
# 测试种子节点连通性
nc -zv 10.0.1.10 9100
Raft 集群脑裂:检查网络分区和选举超时配置。适当增加 raft_election_timeout 以应对高延迟网络。
WAL 复制延迟过高:减少 replication_ack_interval,或增加 Reader 节点带宽。
# 查看复制延迟指标
curl http://reader:8000/api/v1/metrics/replication