聊一聊Zookeeper的Leader选举过程

聊一聊Zookeeper的Leader选举过程

人生苦短,务必性格。

在3.4.0后,Zookeeper的版本默认为FastLeaderElection选举算法。

如想深入了解,可去了解下Fast Paxos算法。

选择机制中的概念

SID(即myid)

每个 Zookeeper 服务器,都需要在dataDir 指定的目录下创建一个名为myid 的文件,该文件中填写整个Zookeeper集群唯一的整数id,如

Server1对应myid填入1

Server2对应myid填入2

Server3对应myid填入3

👉权重:编号越大在选择算法中的权重越大

 

ZXID(最新的事务ID)

ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction Id, 该id称为ZXID(全局唯一)。

如果ZXID1<ZXID2,说明ZXID1在ZXID2之前发生。

👉权重:ID值越大说明数据越新,在选举算法中权重越大

 

Zookeeper节点状态

状态(state)

定义

描述

LOOKING

竞选者状态

试图选举出一个Leader的状态,会发起Leader选举

LEADING

领导者状态

表明它当前的角色是Leader

FOLLOWING 

跟随者状态

表示Leader已经选举出来,它当前的角色是follower

OBSERVING

观察者状态

不参与选举

注1:可以看到,只有服务器在LOOKING(竞选状态)时,才会去执行选举算法。

注2:当一台服务器为LOOKING(竞选状态)时,它会向集群中所有其他机器发送消息,我们称这个消息为“投票”。

 

单机:

当正在运行的只有Server1服务器时,是无法单独进行和完成Leader选举。

即,单机部署Zookeeper,只需要在zoo.cfg中配置下dataDir,再运行启动脚本即完成部署sh zkServer.sh start,此时Mode:standalone。

 

集群:

若进行Leader选举,则至少需要两台机器,启动Zookeeper1和Zookeeper2,一个Mode:leader和一个Mode:follower

Leader选举过程:

当一台机器进入Leader选举流程时,当前集群可能会处于以下两种状态:

  • 服务器启动时期的 Leader 选举
  • 服务器运行时期的 Leader 选举

🔥 服务器启动时期的 Leader 选举

如,有3台可以相互通信的服务器:Server1、Server2、Server3,SID分別为1、2、3, ZXID分别为99、98、97,其选举Leader过程如下:

1.使用“(SID, ZXID)”来标识每次投票, 初始,由于还无法检测到集群中其他机器的状态信息,因此Server1、Server2、Server3都将自己作为Leader来进行投票。此时,Server1的投票为(1, 97),Server2的投票为(2, 98),Server3的投票为(3, 99);

2.Server1、Server2、Server3将这个投票消息广播给集群中其他服务器;

3.集群的其他服务器接收到Server1、Server2、Server3的投票;

4.判断该投票的有效性(是否本轮投票、是否LOOKING状态);

5.投票PK:先比较ZXID,再比较SID

Server3不更新投票,仍为(3, 99),Server1更新投票为(3, 99),Server2更新投票为(3, 99),Server1、Server2再次向集群中所有机器发出投票信息;

6. 统计投票:票数过半有效,对Server3而言,已获得了3票,即(3, 99)的投票标识,此时,票数过半,Server3就是Leader;

7. Mode状态。确定了一个Leader,Server1上sh zkServer.sh status,可以看到Mode更新为follower,Server2上sh zkServer.sh status,可以看到Mode更新为follower,Server2上sh zkServer.sh status,可以看到Mode更新为leader。

 

🚩一般来说,通常ZXID会越大,越有可能成为Leader。原因很简单,ZXID会越大数据就越新,就越能够保证数据的恢复。如果集群中有几个服务器有相同的ZXID,那么SID较大的那台服务器成为Leader。

 

🔥 服务器运行时期的 Leader 选举

1.非Leader服务器宕机或新加入,不影响Leader。

在集群主从已经就绪的情况下,若这个时候Server4发起一次新的选举,那么其他Server会直接告诉它当前的Leader情况,Server4直接使用当前的选举结果,即成为follower。

 

2.Leader服务器宕机,则重新进行Leader选举,其过程和启动时期的Leader选举过程基本一致:

假设正在运行的有Server1、Server2、Server3三台服务器,当前Server3是Leader,若Leader挂了,非Observer服务器会将自己的服务器状态变更为LOOKING,然后重新进入Leader选举流程。

 

如有错误欢迎补充指正!!

集群部署问题可参看Centos7.4 Kafka集群部署(详细图文)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我自人间漫浪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值