ZooKeeper 选举机制

zk选举机制—第一次启动

第一台机器启动服务,发起选举,先投自己一票,查看当前集群中的其他zk服务,当前仅有一台;由于票数小于一半(不小于3),进入观察模式LOOKING,等待其他机器启动服务。

第二台机器启动服务,发起选举,都先投自己一票,查看是否有其他启动服务的机器;可查询到第一台机器,经过比对myid大小,第一台服务器将票改投给第二台服务器。由于票数小于一半(不小于3),进入观察模式LOOKING,等待其他机器启动服务。

第三台服务器启动,发起选举,交换信息后,三台机器都将票投给第三胎服务器,此时票数不小于一半且不小于三,那么第三台服务器为Leader,其余两台为Follower,并且状态发生改变,3为LEADING,1 2为FOLLOWING。

第四台服务器启动,发起选举,由于前三台服务器状态不是LOOKING,不会参与到选举,票数不会更改,所以4的票为1,3的为3,4的状态改为FOLLOWING。

第五台机器启动,发起选举,由于前四台服务器状态不是LOOKING,不会参与到选举,票数不会更改,所以5的票为1,4的票为1,3的为3,5的状态改为FOLLOWING。

zk选举机制—非第一次启动

当集群中的一台服务器出现以下两种情况,就会进行leader的选举。

​ 服务器初始化

​ 服务器运行期间和leaderx失联

当一台机器进行leader选举时会出现以下两种情况:

​ 当前集群存在leader

​ 进行选举的机器会被告知当前集群存在一个leader,那么该机器只需要与leader建立连接。

​ 当前集群不存在leader

​ 那么集群会先比较epoch,再比较zxid,最后比较sid。并按如下规则:

​ 1. EPOCH最大者直接成为leader

​ 2. EPOCH相同者,ZXID最大者成为leader

​ 3. ZXID相同者,SID最大者成为leader

​ EPOCH: :每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。

​ ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。

​ SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loftiest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值