redis 哨兵原理

大哥大姐们,我想请讲解下,redis 哨兵原理
最新回答
薄荷绿℡

2026-06-25 03:22:08

Redis哨兵(Sentinel)的核心原理是通过集群监控、故障判断、选主与故障转移等机制,实现Redis主从集群的自动故障恢复和高可用性。其工作原理可分为以下四个关键部分:

1. 集群监控机制

哨兵通过心跳检测实时监控Redis实例状态:

  • 主观下线:哨兵每隔1秒向集群中的每个实例(主节点或从节点)发送PING命令。若某实例在down-after-milliseconds(默认30秒)内未响应,哨兵会标记该实例为“主观下线”。
  • 客观下线:当超过quorum(默认值为哨兵总数的一半加1)个哨兵均认为某实例主观下线时,该实例被判定为“客观下线”。此时,哨兵会触发故障转移流程。
  • 信息同步:哨兵之间通过Redis的PUBLISH/SUBSCRIBE机制通信,每2秒向__sentinel__:hello频道发布自身监控信息(如主节点地址、哨兵运行状态等),其他哨兵通过订阅该频道感知集群状态变化。
2. 故障转移与选主机制

当主节点客观下线后,哨兵需从从节点中选举新主节点,步骤如下:

  • 筛选候选从节点:

    排除与主节点断开连接超过down-after-milliseconds * 10的从节点(避免数据过旧)。

    优先选择slave-priority值较小的从节点(值越小优先级越高,若为0则不参与选举)。

    若优先级相同,选择复制偏移量(offset)更大的从节点(数据更新)。

    若offset相同,选择运行ID(runid)较小的从节点(确保唯一性)。

  • 执行切换:

    哨兵向选定的从节点发送SLAVEOF NO ONE命令,使其升级为新主节点。

    向其他从节点发送SLAVEOF <新主节点IP> <端口>命令,使其成为新主节点的从节点。

    将原主节点标记为从节点,待其恢复后自动同步新主节点的数据。

3. Leader Sentinel选举机制

为避免多个哨兵同时发起故障转移,需选举一个Leader Sentinel统筹操作:

  • 申请Leader:当第一个哨兵发现主节点客观下线时,会向其他哨兵发送is-masterdown-by-addr命令,申请成为Leader。
  • 投票决策:其他哨兵根据Raft算法投票,若超过半数+1的哨兵同意,申请者成为Leader。同一Term(Epoch)内,少数服从多数。
  • 任务执行:Leader负责协调故障转移流程(如选主、切换从节点角色等),确保操作唯一性。
4. 消息通知与配置更新

哨兵在故障转移后需同步集群状态:

  • 客户端通知:哨兵通过Redis的PUBLISH机制向__sentinel__:hello频道推送新主节点地址,客户端订阅后可获取最新配置。
  • 配置持久化:哨兵会修改本地配置文件(如sentinel.conf),记录新主节点信息,并通知其他哨兵更新配置,确保集群状态一致。

总结:Redis哨兵通过心跳检测、主观/客观下线判断、选主算法和Leader选举机制,实现了自动化故障恢复和集群监控。其设计基于Raft算法和PUB/SUB通信,确保了高可用性和数据一致性,适用于需要低延迟、高可靠的Redis部署场景。