哨兵模式选举、Redis Cluster集群模式选举

哨兵leader选举
选举时机:

该主节点客观下线(超过quorum数量的Sentinel节点认为该redis节点主观下线)

选举算法:

1、哨兵确认集群主节点主观下线后,请求别的哨兵投票给自己。
2、被请求的哨兵如果没有投票给其它哨兵,则投1票。
3、如果一个哨兵的票数达到最低票数(quorum和Sentinel节点数/2+1的最大值,一般是半数以上哨兵节点),则成为leader。

意义:很明显是看哪个哨兵对故障的反应快。成为leader很正常。

主节点选举
选举时机:

该主节点客观下线(超过quorum数量的Sentinel节点认为该redis节点主观下线)
哨兵的leader选举完成,由哨兵leader来选择。

选举算法:

1、过滤故障节点;
2、选择优先级slave-priority最大的follow;都相同则往下
3、选择复制偏移量大的。都相同则往下
4、选择runid最小的。

意义:基本上是看哪个follow复制偏移量大。大的成为leader没毛病。

数据一致性:
leader选举成功之后,会把数据强制同步到follow。

redis cluster选举
选举时机:

该主节点客观下线(半数以上持有槽的主节点认为该主节点主观下线)

选举算法:

1、从节点发现自己的主节点不可用;
2、从节点有一个延迟选举时间,延迟选举时间根据从节点数据的复制偏移量来确定,偏移量大的先发起选举。

DELAY = 500ms + random(0 ~ 500ms) + SLAVE_RANK * 1000ms 
(SLAVE_RANK表示此slave已经从master复制数据的总量的rank。Rank越小代表已复制的数据越新。)

3、从节点currentEpoch加1,并广播发送其他主节点进行投票。
4、从节点发起投票后,会等待至少两倍NODE_TIMEOUT时长接收投票结果,不管cluster-node-timeout为何值,也至少会等待2秒。
5、只有持有槽的主节点才可以投票,且在同一个epoch内只会投一票。
6、从节点收到响应的投票信息,会比较currentEpoch,小于自己的直接丢弃,一旦获得半数主节点的票,则声明自己赢得选举。
7、如果slave在两倍的cluster-node-timeout(集群节点不可用的最大超时时间,默认15s)时间内(至少2秒)未赢得选举,则放弃本次选举,然后在四倍cluster-node-timeout时间(至少4秒)后重新发起选举。

意义:延迟选举时间很明显是为了让偏移量大的slave更容易赢得选举。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值