美文网首页
Zookeeper集群启动阶段选举和运行阶段的选举

Zookeeper集群启动阶段选举和运行阶段的选举

作者: 鸿雁长飞鱼龙潜跃 | 来源:发表于2019-07-02 11:22 被阅读0次

    Zookeeper选举的触发条件有2个:

    1,Zookeeper集群启动阶段触发的leader选举。

    2,Zookeeper集群运行阶段leader挂机触发的leader选举。

    个人理解,Zookeeper集群的选举的触发条件只有上面2个,因为follower的挂机或加入不会触发leader选举。

    当然,还有一种极端情况:leader领导的所有follower都挂了,这种场景下,是否会触发leader选举?如何选举?目前我还无法回答这个问题。暂时不考虑,大家如果有想法,不妨留言交流。

    OK,基于上面的认知,我们开始今天的讨论。

    一,Zookeeper集群启动阶段选举

    1,每台服务器选举自己为leader,然后把自己的选票通过广播通知其他服务器。此时ServerState的状态是LOOKING。

    2,每台服务器接收来自其他服务器的选票,并进行合法性校验,主要有两点校验,选举轮次校验和服务器的状态的校验。

    3,处理选票。每台服务器都会将自己的选票与其他服务器的选票进行PK,PK的规则如下:

    规则一:首先进行ZXID的PK,大者获胜。

    规则二:如果ZXID相等,则进行myid的PK,大者获胜。

    经过PK以后,如果当前服务器PK失败,则会把自己的选票重新投给胜者,然后把更新后的选票通过广播通知其他服务器。

    4,统计选票。根据超过半数的原则,每台服务器都会统计leader的选票,如果超过半数,则结束选举。

    5,更新服务器状态。follower把自己的状态更新为following,leader把自己的状态更新为leading。

    二,Zookeeper集群运行阶段的选举

    Zookeeper集群运行期间,leader挂了,此时会触发leader选举,流程如下:

    1,变更状态。

    当leader挂了之后,其他所有的非observer服务器都会将自己的状态更新为LOOKING,然后开始选举leader。

    2,每台服务器选举自己为leader,然后把自己的选票通过广播通知其他服务器。这里的流程和启动阶段的leader选举是一致的,但是ZXID可能不同。

    3,接收选票。流程和启动阶段的leader选举是一致的。

    4,处理选票。流程和启动阶段的leader选举是一致的。

    5,统计选票。流程和启动阶段的leader选举是一致的。

    6,更新服务器状态。流程和启动阶段的leader选举是一致的。

    三,ServerState

    ServerState是QuorunPeer.class的内部类,定义了Zookeeper集群中服务器的状态,可选值有4个:

    LOOKING

    FOLLOWING

    LEADING

    OBSERVING

    相关文章

      网友评论

          本文标题:Zookeeper集群启动阶段选举和运行阶段的选举

          本文链接:https://www.haomeiwen.com/subject/rjczcctx.html