CSDN话题挑战赛第2期
参赛话题:学习笔记
学习之路,长路漫漫,需要您的陪伴。
关注一波,您的关注是我最大的动力。
Zookeeper选举机制–第一次启动
1.服务器1启动,发起选举,服务器1投自己一票,但此时票数不足半数以上(3票),选举无法完成,服务器1处于LOOKING状态。
2.服务器2启动,重新发起选举, 服务器1,2各自选自己一票,投票完成服务器1,2交换选票信息,此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1) 大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
3.服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服 务器3的票数已经超过半数,服务器3当Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING
4
启动,发起一次选举。此时服务器
1
,
2
,
3
已经不是
LOOKING
状态,不会更改选票信息。交换选票信息结果:服务器
3
为
3
票,服务器
4
为1票。此时服务器
4
服从多数,更改选票信息为服务器
3
,并更改状态为
FOLLOWING
;
5.服务器5启动,同4一样当小弟
Zookeeper选举机制–非第一次启动
接下来介绍三个概念:
:
服务器
ID
。
用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,
和
myid
一致
。
:事务
ID
。
ZXID
是一个事务
ID
,用来 标识一次服务器状态的变更。
在某一时刻, 集群中的每台机器的ZXID
值不一定完全一 致,这和ZooKeeper
服务器对于客户端“更 新请求”的处理逻辑有关。
:
每个
Leader
任期的代号
。没有 Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加
(1)首先我们知道当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:
- 服务器初始化启动(即上面讲述的第一次启动)。
- 服务器运行期间无法和Leader保持连接(比如服务器5无法与Leader连接,则服务器5会自己进行选举)。
Leader
选举流程时,当前集群也可能会处于以下两种状态:
- 集群中本来就已经存在一个Leader。
对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
- 集群中确实不存在Leader。
ZooKeeper
由
5
台服务器组成,
SID
分别为
1
、
2
、
3
、
4
、
5
,
ZXID
分别为
8
、
8
、
8
、
7
、
7
,并且此时
SID
为
3
的服务器是
Leader
。某一时刻,3和
5
服务器出现故障,因此开始进行
Leader
选举。
此时SID为1,2,4的服务器会进行选举,那么选举规则是什么呢?正是依靠前面我们讲过的那三个概念,我们可以看到1,2,4服务器的(EPOCH,ZXID,SID )分别为:(1,8,1),(1,8,2),(1,7,4)
选举Leader规则:
①EPOCH大的直接胜出
②EPOCH相同,事务id(ZXID)大的胜出
③事务id相同,服务器id(SID)大的胜出
所以服务器2会成为新的Leader。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118501.html