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
5.服务器5启动,同4一样当小弟
Zookeeper选举机制--非第一次启动
接下来介绍三个概念:
(1)首先我们知道当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:
- 服务器初始化启动(即上面讲述的第一次启动)。
- 服务器运行期间无法和Leader保持连接(比如服务器5无法与Leader连接,则服务器5会自己进行选举)。
- 集群中本来就已经存在一个Leader。
对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
- 集群中确实不存在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。