面试:zookeeper选举机制

导读:本篇文章讲解 面试:zookeeper选举机制,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

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

Zookeeper选举机制–第一次启动

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

面试:zookeeper选举机制

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

面试:zookeeper选举机制

面试:zookeeper选举机制 

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

面试:zookeeper选举机制

面试:zookeeper选举机制 

4.服务器
4
启动,发起一次选举。此时服务器
1

2

3
已经不是
LOOKING
状态,不会更改选票信息。交换选票信息结果:服务器
3

3
票,服务器
4
为1票。此时服务器
4
服从多数,更改选票信息为服务器
3
,并更改状态为
FOLLOWING

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

面试:zookeeper选举机制

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

 接下来介绍三个概念:

SID

服务器
ID

用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,

myid
一致
ZXID
:事务
ID

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

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

 

面试:zookeeper选举机制

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

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

面试:zookeeper选举机制

 

(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
选举。

面试:zookeeper选举机制 

此时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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118501.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!