ZooKeeper中Leader选举流程

ZooKeeper中Leader选举流程

1、ZooKeepter节点状态
LOOKING:寻找Leader状态,处于该状态需要进行选举流程
LEADING:领导者状态,处于该状态的节点说明是角色已经是Leader
FOLLOWING:跟随者状态,表示Leader已经选举出来,当前节点角色是follower
OBSERVER:观察者状态,表明当前节点角色是observer(不参与投票)
2、事务ID
ZooKeeper状态的每次变化都接收一个ZXID(ZooKeeper事务ID)形式的标记。ZXID是一个64位的数字,由Leader统一分配,全局唯一,不断递增。ZXID展示了所有的ZooKeeper的变更顺序。每次变更会有一个唯一的ZXID,如果ZXID1小于ZXID2说明ZXID1在ZXID2之前发生。
3、初始化时的选举流程(三台服务器)
在这里插入图片描述
a:zk1启动,一台服务器无法进行leader选举,zk2启动时,此时两台机器可以相护通信,每台都试图找到leader,于是进入leader选举过程。选举过程开始。
b:每个server发出一个投票。由于时初始情况,zk1和zk2都会将自己作为leader服务器来进行投票,每次投票会包含所推举的服务器的myid和zxid,使用(myid,zxid)来表示,此时的zk1的投票为(1,0),zk2的投票为(2,0),然后各自将这个投票发给集群中的其他机器。
c:接受来自各个服务器的投票。集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自LOOKING状态的服务器。
d:处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行比较,规则如下:
• 优先检查ZXID。zxid比较大的服务器优先做leader
• 如果zxid相同,那么就比较myid。myid较大的服务器作为leader服务器
对于zk1而言,他的投票时(1,0),接收zk2的投票为(2,0),首先会比较两者的zxid,均为0,再比较myid,此时zk2的myid最大,于是zk2胜。zk1更新自己的投票为(2,0),并将投票重新发送给zk2。
e:统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于zk1、zk2而言,都统计出集群中已经有两台机器接受了(2,0)的投票信息,此时便认为已经选出zk2作为leader。
f:改变服务器状态。一单确定了leader,每个服务器就会更新自己的状态,如果时follower,那么就变更为FOLLOWING,如果是leader,就变更为LEADING。当新的ZooKeeper节点zk3启动时,发现已经有leader了,不再选举,直接将状态从LOOKING改为FOLLOWING。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值