面试:zookeeper选举机制

CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,需要您的陪伴。
关注一波,您的关注是我最大的动力。

Zookeeper选举机制--第一次启动

1.服务器1启动,发起选举,服务器1投自己一票,但此时票数不足半数以上(3票),选举无法完成,服务器1处于LOOKING状态。

2.服务器2启动,重新发起选举, 服务器1,2各自选自己一票,投票完成服务器1,2交换选票信息,此时服务器1发现服务器2myid比自己目前投票推举的(服务器1) 大,更改选票为推举服务器2此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器12状态保持LOOKING

 

3.服务器3启动,发起一次选举。此时服务器12都会更改选票为服务器3。此次投票结果:服务器10票,服务器20票,服务器33票。此时服 务器3的票数已经超过半数,服务器3Leader。服务器12更改状态为FOLLOWING,服务器3更改状态为LEADING

 

4.服务器 4 启动,发起一次选举。此时服务器 1 2 3 已经不是 LOOKING 状态,不会更改选票信息。交换选票信息结果:服务器 3 3 票,服务器 4 为1票。此时服务器 4 服从多数,更改选票信息为服务器 3 ,并更改状态为 FOLLOWING

5.服务器5启动,同4一样当小弟

 Zookeeper选举机制--非第一次启动

 接下来介绍三个概念:

SID 服务器 ID 用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复, myid 一致
ZXID :事务 ID ZXID 是一个事务 ID ,用来 标识一次服务器状态的变更。 在某一时刻, 集群中的每台机器的ZXID 值不一定完全一 致,这和ZooKeeper 服务器对于客户端“更 新请求”的处理逻辑有关。
Epoch 每个 Leader 任期的代号 。没有 Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加

 

1)首先我们知道当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举: 

  • 服务器初始化启动(即上面讲述的第一次启动)。
  • 服务器运行期间无法和Leader保持连接(比如服务器5无法与Leader连接,则服务器5会自己进行选举)。

 

(2)而当一台机器进入 Leader 选举流程时,当前集群也可能会处于以下两种状态:
  • 集群中本来就已经存在一个Leader

 对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。

  • 集群中确实不存在Leader

假设 ZooKeeper 5 台服务器组成, SID 分别为 1 2 3 4 5 ZXID 分别为 8 8 8 7 7 ,并且此时 SID 3 的服务器是 Leader 。某一时刻,3和 5 服务器出现故障,因此开始进行 Leader 选举。

 

此时SID为1,2,4的服务器会进行选举,那么选举规则是什么呢?正是依靠前面我们讲过的那三个概念,我们可以看到1,2,4服务器的(EPOCH,ZXID,SID )分别为:(1,8,1),(1,8,2),(1,7,4)

选举Leader规则

①EPOCH大的直接胜出

②EPOCH相同,事务id(ZXID)大的胜出

③事务id相同,服务器id(SID)大的胜出

 所以服务器2会成为新的Leader。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zoeil

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

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

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

打赏作者

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

抵扣说明:

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

余额充值