Zookeeper选举机制

1.Zookeeper选举机制

什么时候需要进行选举?

当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进行Leader选举:

1)服务器初始化启动

2)服务器运行期间无法和Leader保持连接

怎样进行选举?

1.服务器初始化启动的Leader选举

前提:至少需要两台服务器,当只有一台服务器时,其单独无法进行Leader选举,当有两台服务器时,并且他们之间可以相互通信,此时才能进入选举状态

选举过程:

1)每台服务器发出自己的投票。初始投票每台服务器都会投自己,投票内容为(myidZXIDEpoch

2)接收来自各个服务器的投票。每台服务器接收到其他服务器的投票后,首先判断该投票的有效性(根据Epoch判断是否为本轮投票,是否来自LOOKING状态的服务器)

3)处理投票。针对接收到的每一个投票,都需要将该投票与自己的投票进行PK,规则如下:

1)首先检查ZXID,ZXID大的服务器优先作为Leader

2)ZXID相同,myid大的服务器作为Leader

4)将投票的处理结果发送给其他服务器,进行重新投票。

5)统计投票结果。若超过半数的服务器接受到相同的投票信息,则便可以认为选出了Leader。

6)改变服务器状态。一旦确定了Leader,每台服务器根据选举结果,更新自己的状态为Leader或是Follower。

//启动的顺序不同,选举的结果有可能不同

2.服务器运行期间的Leader选举

前提:Leader服务器挂了。在服务器运行期间,Follower服务器挂掉不会影响Leader,只有当Leader服务器挂掉,才会进入选举状态。此时,整个集群暂停对外的服务,进入选举状态。

选举过程:

1)变更状态。Leader挂掉,其他的Observer服务器都会将自己的服务器状态变更为Looking,并进入选举过程。

。。。与初始化启动选举过程一致

名词:

1)Looking:寻找Leader状态。拥有此状态及服务器会进入Leader选举状态

2)Follower:跟随者状态。表明当前服务器的角色为Follower

3)Leading:领导者状态。表明当前服务器的角色为Leader

4)Observing:观察者状态。表名当前服务器的角色为Observer

myid:服务器ID,编号越大在选举中所占权重越大

ZXID:服务器中存放的最大数据ID,值越大表明数据越新,在选举中所占权重越大。

Epoch:逻辑时钟,每一轮投票过程中逻辑时钟必须是相同的,每投完一轮这个数值就会增加。

posted @ 2019-11-13 23:59  JoshWill  阅读(542)  评论(0编辑  收藏  举报