Redis的哨兵故障转移原理是什么

Redis的哨兵故障转移原理是什么
最新回答
做梦的季节

2022-12-30 12:03:21

Redis哨兵故障转移原理主要分为三个阶段:监听服务器状态、选举Sentinel领导者、选举新主服务器并完成转移,具体实现逻辑如下

1. 监听服务器状态
每个Sentinel节点每秒向主节点、从节点及其他Sentinel节点发送PING命令进行心跳检测。若节点在配置的down-after-milliseconds时间内未返回有效回复(+PONG、-LOADING或-MASTERDOWN),则被标记为主观下线。若下线节点为主服务器,Sentinel会向其他监视同一主服务器的Sentinel询问确认。当超过quorum(配置中sentinel monitor的最后一个参数)数量的Sentinel认为主服务器下线时,该主服务器昌山伏被标记为客观下线,触发故障转移流程。

2. 选举Sentinel领唯睁导者
当主服务器被判定为客观下线后,Sentinel集群通过Raft算法选举领导者完成故障转移。选举规则如下:

  • 所有在线Sentinel均有资格参与选举。
  • 标记主服务器主观下线的Sentinel向其他节点发送sentinel is-master-down-by-addr命令,请求成为领导者。
  • 其他Sentinel按先到先得原则投票,若未同意过其他请求则同意当前请求,否则拒绝。
  • 若某Sentinel获得超过半数票数,则成为领导者;若未选出,则间隔一段时间后重新选举,直至成功。

3. 选举新主服务器并完成转移
领导者Sentinel执行以下步骤完成故障转移:

  • 挑选新主服务器:从已下线主服务器的从节点中筛选,淘汰主观下线、断线或最后一次回复超时(>5秒)的节点,再淘汰与主节点断开连接超时(down-after×10)的节点。剩余节点中,选择复制偏移量最大的从节点作为新主;若偏移量相同,则选择运行ID最小的节点。对新主执行SLAVEOF NO ONE命令使其升级为主节点。
  • 更新从节点配置:领导者向其他从节点发送SLAVEOF new_master port命令,使其复制新主节点数据,复制行为受配置文件parallel-syncs参数影响(控制同时发起复制的从节点数量)。
  • 恢复旧主节点:若旧主节点恢复,领导者将其设置为新主节点的从节点,并持续监控其状态。

关键设计

  • 高可用性:哨兵集群需部署奇数个实例(至少3个),避免脑裂问题,确保选举有效性。
  • 故障耐携检测:通过主观下线与客观下线两阶段判断,减少误判风险。
  • 自动化流程:从故障发现到新主选举、从节点重配置全程自动化,无需人工干预。

该机制通过分布式共识与自动化操作,实现了Redis主从架构下的高可用性,确保主节点故障时服务不中断。