小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
相关:
Redis 的哨兵集群通过提供冗余的方式,减少单个哨兵对主库运行状态的误判。当哨兵集群判定主库客观下线以后,接下来还有一个重要的工作,就是选定新的主库,进行故障迁移。
这时就需要选出一个哨兵,来执行主从切换的任务。这里类似于哨兵集群判定主库客观下线,也是一个投票的过程。
这里需要再详细介绍一下判定主库客观下线的过程。判定主库客观下线需要一定数量的哨兵判定其主管下线。那么,最终做出客观下线的哨兵到底应该是其中的哪一个哨兵呢?
在哨兵集群中,任何一个哨兵判定主库主管下线之后,就会给其它哨兵发送一个指令。这个指令代相当于询问其他哨兵「主库是不是挂了?」,接收到指令后的其他哨兵会回复 Y 或者 N,相当于赞成或者反对。如果赞成的哨兵数量达到仲裁所需的赞成数量,那么,发起询问的哨兵就可以将主库标记为客观下线。
这里的仲裁所需的赞成数量在哨兵配置文件的 quorum 选项,这个票数包含发起询问的哨兵自己的一票。
这个时候,这个哨兵会再给其它哨兵发起一个投票,希望大家选举自己来完成主从切换的任务。如果选举成功,这个哨兵就是 Leader。
想要成为 Leader 需要满足两个条件:一是,在投票中获得一半以上的票数;二是,这个票数不低于 quorum 配置项的值。满足要求的哨兵会成为 Leader 执行主从切换的任务。如果没有达到要求,哨兵集群会等待一段时间在进行选举,以避免网络阻塞等原因造成的选举失败。