跳到主要内容

运维与排错

自动故障转移

Writer 故障转移

当 Primary Writer 不可用时,集群自动将 Standby Writer 提升为 Primary:

  1. Raft Leader 定期检查 Primary Writer 健康(每 5 秒)
  2. 连续 3 次失败 → 触发故障转移
  3. 选择 Standby Writer(优先)或任意健康 Writer → 提升为 Primary
  4. 冷却期 60 秒内不会重复切换

Compactor 故障转移

  • Leader 每 10 秒检查 Compactor 健康
  • 不可用时,优先选择健康 compactor 节点,其次 writer 节点
  • 新节点自动接管压缩调度器

配置

[cluster]
failover_enabled = true
failover_timeout = 30 # 故障转移超时(秒)
failover_cooldown = 60 # 冷却时间(秒)

扩容 Reader

Reader 节点可以随时加入,无需重启现有节点:

  1. 按照 Reader 配置模板准备新节点
  2. 设置 seeds 指向任意现有 Writer 的 coordinator 地址
  3. 启动新节点——自动加入集群并开始接收查询请求

缩容/移除节点

# 移除已死节点
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