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

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

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值最大的就可以代表当前集群中数据最完整的一台机器。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4671952.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存