面试:zookeeper选举机制

发布于:2022-11-29 ⋅ 阅读:(239) ⋅ 点赞:(0)

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。

本文含有隐藏内容,请 开通VIP 后查看