详解redis集群选举机制

概要

当redis集群的主节点故障时,sentinel集群将从剩余的从节点中选举一个新的主节点,有以下步骤:

  • 故障节点主观下线
  • 故障节点客观下线
  • sentinel集群选举leader
  • sentinel leader决定新主节点

选举过程

1、主观下线

sentinel集群的每一个sentinel节点会定时对redis集群的所有节点发心跳包检测节点是否正常。如果一个节点在down-after-milliseconds时间内没有回复sentinel节点的心跳包,则该redis节点被该sentinel节点主观下线。

2、客观下线

当节点被一个sentinel节点记为主观下线时,并不意味着该节点肯定故障了,还需要sentinel集群的其他sentinel节点共同判断为主观下线才行。

该sentinel节点会询问其他sentinel节点,如果sentinel集群中超过quorum数量的sentinel节点认为该redis节点主观下线,则该redis客观下线。

如果客观下线的redis节点是从节点或者是sentinel节点,则操作到此为止,没有后续的操作了;如果客观下线的redis节点为主节点,则开始故障转移,从从节点中选举一个节点升级为主节点。

3、sentinel集群选举leader

如果需要从redis集群选举一个节点为主节点,首先需要从sentinel集群中选举一个sentinel节点作为leader。

每一个sentinel节点都可以成为leader,当一个sentinel节点确认redis集群的主节点主观下线后,会请求其他sentinel节点要求将自己选举为leader。被请求的sentinel节点如果没有同意过其他sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。

如果一个sentinel节点获得的选举票数达到leader最低票数(quorumsentinel节点数/2+1的最大值),则该sentinel节点选举为leader;否则重新进行选举。

4、sentinel leader决定新主节点

当sentinel集群选举出sentinel leader后,由sentinel leader从redis从节点中选择一个redis节点作为主节点:

  • 过滤故障的节点
  • 选择优先级slave-priority最大的从节点作为主节点,如不存在则继续
  • 选择复制偏移量(数据写入量的字节,记录写了多少数据。主服务器会把偏移量同步给从服务器,当主从的偏移量一致,则数据是完全同步)最大的从节点作为主节点,如不存在则继续
  • 选择runid(redis每次启动的时候生成随机的runid作为redis的标识)最小的从节点作为主节点

为什么sentinel集群至少3节点

一个sentinel节选举成为leader的最低票数为quorumsentinel节点数/2+1的最大值,如果sentinel集群只有2个sentinel节点,则

sentinel节点数/2 + 1
= 2/2 + 1
= 2

即leader最低票数至少为2,当该sentinel集群中由一个sentinel节点故障后,仅剩的一个sentinel节点是永远无法成为leader。

也可以由此公式可以推导出,sentinel集群允许1个sentinel节点故障则需要3个节点的集群;允许2个节点故障则需要5个节点集群。

到此这篇关于详解redis集群选举机制的文章就介绍到这了,更多相关redis集群选举机制内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐