Sentinel 哨兵 —— 高可用 (high availability)
监视集群,主服务器的选举。
主服务器的下线判断:
1、在down-after-milliseconds选项设置的时间内,连续向Sentinel返回无效回复。
2、询问其它监视主服务器的Sentinel也得到主服务器下线的回应。
注意点:如何正确的判断主服务器是否下线。
领头Sentinel的选举:(当主服务器被判断为下线时,监视该集群的Sentinel就进行领头的选举)
1、所有在线的Sentinel都有被选举为领头的资格。
2、每次选举后,Sentinel的配置纪元自增1。(configuration epoch,类似计数器的作用)
3、同一个批次的配置纪元内,选票唯一,确定后,就不再修改。
4、首先发现主服务器下线的Sentinel优先设置为领头哨兵。
5、先到先得规则,如果有两个Sentinel同时要求目标Sentinel将自己设置为领头Sentinel,则哪个消息先到达,执行哪个。抛弃后面到达的消息。
6、半数规则。领头Sentinel需要得到超过半数以上的投票,公式为 n/2+1 (n/2向下取整,且一般情况下,n为奇数)
7、在同一个配置纪元下,领头Sentinel选举失败,则循环上述的规则。
注意点:如何才能确保领头唯一,且选举的时候不进入死循环。上述的规则,就是答案。
主服务器的选举:
1、从服务器正常。
2、根据从服务器的优先级进行排序。
3、根据从服务器的复制偏移量进行排序。
4、根据从服务器的运行ID进行排序。
5、根据这三个组合排序,获取第一个从服务器做为主服务器。
注意点:选取数据最新的从服务器作为主服务器。
选好主服务器后,进行故障转移:
1、让从服务器复制新的主服务器。
2、如果已经下线的主服务器再次上线,则该服务器作为新主服务器的从服务器。