redis集群选举机制简介

哨兵模式选举机制

redis cluster的高可用的原理,跟redis replication sentinel类似,过程如下

1、判断节点宕机

​ 如果一个节点认为另外一个节点宕机,那么就是pfail,主观宕机。如果多个节点都认为另外一个节点宕机了,那么就是fail,客观宕机,跟哨兵的原理几乎一样,pfail对应sdown,fail对应odown 。

​ 在cluster-node-timeout内,某个节点一直没有返回pong,那么就被认为pfail,如果一个节点认为某个节点pfail了,那么会在gossip ping消息中,ping给其他节点,如果超过半数的节点都认为pfail了,那么就会变成fail。

2、从节点过滤

​ 对宕机的master node,在其所有的slave node中,选择一个切换成master node,检查每个slave node与master node断开连接的时间,如果超过了cluster-node-timeout * cluster-slave-validity-factor,那么就没有资格切换成master,这个也是跟哨兵是一样的,从节点超时过滤的步骤。

3、从节点选举

对slave进行排序,排序方法如下:

  • slave priority:选择优先级slave-priority最大的从节点作为主节点,如不存在则继续。 按照slave优先级进行排序,slave priority越低,优先级就越高。
  • replica offset:选择复制偏移量(数据写入量的字节,记录写了多少数据。主服务器会把偏移量同步给从服务器,当主从的偏移量一致,则数据是完全同步)最大的从节点作为主节点,如不存在则继续。如果slave priority相同,那么看replica offset,哪个slave复制了越多的数据,offset越靠后,优先级就越高。
  • run id:如果上面两个条件都相同,那么选择一个run id比较小的那个slave。(redis每次启动的时候生成随机的runid作为redis的标识)

​ 所有的master node开始slave选举投票,给要进行选举的slave进行投票,如果大部分master node(N/2 + 1)都投票给了某个从节点,那么选举通过,那个从节点可以切换成master。从节点执行主备切换,成为主节点

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更容易赢得选举。
 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值