*Redis CLUSTER FAILOVER 命令

强制当前从节点发起故障转移,晋升为主节点。


*语法

CLUSTER FAILOVER [FORCE | TAKEOVER]

*参数说明

参数 类型 必填 说明
FORCE 标志 强制故障转移,不等待主节点确认
TAKEOVER 标志 直接接管,不检查主节点状态(用于网络分区)

*返回值

条件 返回值
成功 OK
失败 错误

*时间复杂度

O(1)

*

*示例

> CLUSTER FAILOVER
OK

# 强制故障转移
> CLUSTER FAILOVER FORCE
OK

# 直接接管(网络分区场景)
> CLUSTER FAILOVER TAKEOVER
OK

*常见错误

错误 原因 解决
当前节点是主节点 CLUSTER FAILOVER 只能从节点执行 在从节点上执行
集群未配置 单机模式不支持集群命令 确认在集群模式下运行
TAKEOVER 后脑裂风险 网络分区场景使用 TAKEOVER 恢复后人工干预合并集群状态

*最佳实践

  1. 手动切换:主节点维护时,手动在从节点执行 CLUSTER FAILOVER 切换。
  2. FORCE 慎用:FORCE 会立即切换,可能导致短暂数据丢失。

  3. 网络分区场景:网络分区时使用 TAKEOVER,恢复后需要人工干预合并集群状态。

  4. 监控复制偏移量:执行 FORCE/TAKEOVER 前检查 INFO REPLICATION 中的 masterreploffset,评估可能丢失的数据量。

*5. 自动化切换:生产环境建议依赖 Redis Cluster 自动故障转移,手动 FAILOVER 仅用于维护和灾备。

*FAQ

Q1: CLUSTER FAILOVER 和自动故障转移有什么区别? A: CLUSTER FAILOVER 是手动触发,由管理员在从节点执行;自动故障转移由集群检测主节点下线后自动执行,无需人工干预。

Q2: FORCE 和 TAKEOVER 有什么区别? A: FORCE 会尝试与主节点通信确认,但如果主节点无响应也会执行;TAKEOVER 完全不检查主节点状态,直接接管,用于网络分区场景。

Q3: 主节点可以执行 CLUSTER FAILOVER 吗? A: 不可以。CLUSTER FAILOVER 只能从节点执行,主节点执行会返回错误。

Q4: 执行 CLUSTER FAILOVER 后原主节点会变成从节点吗? A: 通常不会自动变回从节点。如果需要恢复原拓扑,需要手动在原主节点执行 CLUSTER REPLICATE。

Q5: CLUSTER FAILOVER 会导致数据丢失吗? A: 正常情况下不会。使用 FORCE 时,如果主节点有未同步的写操作,这些数据会丢失。使用 TAKEOVER 风险更高,因为它不检查复制偏移量。