讲一下哨兵选举主节点的策略?

Redis Sentinel 在主节点故障时会选择一个从节点晋升为新的主节点,过程如下:

  1. 故障检测: Sentinel会不断地通过心跳检测Redis节点的健康状态。当主节点不可达时,检测到主节点down掉,这个Sentinel会等待指定时间(例如10秒)后,开始下一步。

  2. 发起投票: 该Sentinel会向其他Sentinels发送一个故障转移的请求,请求得到的多数同意(超过半数)就会开始主节点的故障转移。

  3. 选择新的主节点: Sentinel会选择一个从节点来进行晋升。选择策略主要考虑以下因素:复制偏移量最大的节点(即数据最新的节点)、运行ID较小的节点(这是为了在其他因素都相等的情况下,每个Sentinel都能选出相同的节点)、没有被其他Sentinel标记为主观下线的节点。先按照第一规则选举,如果都相等按照第二规则,依此类推,最后能找出一个从节点。

  4. 晋升选举出的从节点为主节点:Sentinel向选举出的从节点发送命令,关闭其对旧的主节点的同步,让其成为新的主节点。

  5. 通知其他从节点、客户端和Sentinels更改主节点:晋升成功后,该Sentinel会通知其他的从节点、客户端和Sentinel更改主节点。

注意:整个故障转移过程中,可能会有多个Sentinel发起投票,但只有先获得大多数Sentinel认可的才能开始故障转移,且在故障转移过程中,其他Sentinel不会再发起新的投票。

发表评论

后才能评论