zookeeper选举机制!超级详细!!基于不同场景下选举机制分析

首先先记住选举的总原则:当zk集群中任意一台机器得到 选票数超过机器总数的一半以上, 它就是当前集群的leader。

第一种情况:在一个新搭建的集群下进行选举(集群中没有数据)

举例:以5台机器为例
前提:集群配置没问题!1,2,3,4,5 顺时启动

  1. server1 启动,此时它会给自己投票,因为当前票数没有过半,它 的投票结果出于(LOOKING)
  2. server2 启动,此时先给自己投一票,然后server2和server1进行通信, 相互交换选票,此时发现个自有一票,那么进行myid(配置集群时候的写的编号)的比较, 2 > 1,server2选举胜出,server1会把票投给server2。这个时候还没有选出leader, 票数没有达到半数以上。 选举结果任然出于LOCkING。这时候把选票结果恢复到原始状态。server1和server2都有一票。
  3. server3 启动,先给自己投票,然后就与server1和server2进行通信,大家交换选票,因为个自都是1票,所以比较myid, 此时server3胜出,server1和server2将自己的选票投给server3,此时server3累计3票,最后判断当前票数知否超过集群的总数的一半。由此就把leader选出了,就是server3。
  4. server4 启动,由于当前集群已经产生了leader,它就不参与选举,自动成为follower
  5. server5 启动,由于当前集群已经产生了leader,它就不参与选举,自动成为follower
    注意:当启动顺序不确定时,选举结果可能受影响,但是选举额机制原理不变。

第二种情况。集群工作中,leader突然挂了,在当前机器存活数过半以上

要重新选举出leader。

  1. 以上情况出现,会从现有存活的机器中再选出一个leader,此时集群每台机器zxid就不一样,这种情况的选举就以两个条件去投票,就是 (myid,zxid)。 此时就会选择当前集群中zxid值最大的为leader。 如果极端情况下,zxid的值 一样,此时会比较myid。
  2. 解释下什么是zxid:每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
    结论:某种意义上,zxid值最大的就可以代表当前集群中数据最完整的一台机器。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值