Zookeeper Leader选举过程

一、先明确几个关键字的含义:

1、myid:给每台服务器定义的标识

2、zxid:节点在运行过程中产生的数据id,id越大表示数据越清晰

3、Epoch:选举的轮数,即逻辑时钟。随着选举的轮数++

4、Server状态:LOOKING--寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有Leader,因此需要进入Leader选举状态 

                           FOLLOWING--跟随者状态。表明当前服务器角色是Follower

                           OBSERVING--领导者状态。表明当前服务器角色是Leader

                           LEADING--观察者状态。表明当前服务器角色是Observer

  二、选举步骤

假设有A、B、C、D、E的zookeeper集群,处在刚启动时刻

1、服务器A启动,推荐自己作为LEADER,并将(myid 、 zixd 、 epoch)作为广播信息,广播到集群中所有的服务器(Server)。然后等待集群中的服务器返回信息 ,此时其他服务器还未启动,第一轮选举结束,A处于LOOKING状态。

2、服务器B启动,推荐自己作为LEADER,将(myid 、 zixd 、 epoch)作为广播信息,此时服务器A接收到B的广播信息,看到B的myid大于自己,所以服务器A变更自己的投票信息,推举B为LEADER。ps:此时B的投票数还未达到半数以上,所以B也是处于LOOKING状态,第二轮选举结束

3、服务器C启动,推荐自己作为LEADER,将(myid 、 zixd 、 epoch)作为广播信息,此时服务器A、B接收到C的投票信息,发现C的myid比自己的投票信息大,所以变更投票信息 投C为leader,服务器C得到的投票数为3,大于服务器的半数,所以服务器C成为LEADER,状态变更为LEADING,服务器A、B状态变更为FOLLOWING,第三轮投票结束。

4、服务器D启动,推荐自己作为LEADER,虽然D的myid大于A、B、C,但是服务器C已经成为leader,所以D只能成为following

5、服务器E启动,原理同4。


为什么zookeeper集群是单数?

1、容错

由于在增删改操作中需要半数以上服务器通过,来分析以下情况。

2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉

3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉

4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉

5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉

6台服务器,至少3台正常运行才行(6的半数为3,半数以上最少为4),正常运行可以允许2台服务器挂掉

 

通过以上可以发现,3台服务器和4台服务器都最多允许1台服务器挂掉,5台服务器和6台服务器都最多允许2台服务器挂掉

但是明显4台服务器成本高于3台服务器成本,6台服务器成本高于5服务器成本。这是由于半数以上投票通过决定的。

 

2、防脑裂

一个zookeeper集群中,可以有多个follower、observer服务器,但是必需只能有一个leader服务器

如果leader服务器挂掉了,剩下的服务器集群会通过半数以上投票选出一个新的leader服务器。

集群互不通讯情况:

一个集群3台服务器,全部运行正常,但是其中1台裂开了,和另外2台无法通讯。3台机器里面2台正常运行过半票可以选出一个leader。

一个集群4台服务器,全部运行正常,但是其中2台裂开了,和另外2台无法通讯。4台机器里面2台正常工作没有过半票以上达到3,无法选出leader正常运行。

一个集群5台服务器,全部运行正常,但是其中2台裂开了,和另外3台无法通讯。5台机器里面3台正常运行过半票可以选出一个leader。

一个集群6台服务器,全部运行正常,但是其中3台裂开了,和另外3台无法通讯。6台机器里面3台正常工作没有过半票以上达到4,无法选出leader正常运行。

 

通可以上分析可以看出,为什么zookeeper集群数量总是单出现,主要原因还是在于第2点,防脑裂,对于第1点,无非是正本控制,但是不影响集群正常运行。但是出现第2种裂的情况,zookeeper集群就无法正常运行了。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值