4-ZooKeeper选举机制

zookeeper节点的状态

 zookeeper集群的节点有四种状态:
LEADING:说明此节点已经是leader节点,在zookeeper中,只有leader才有写权限。
LOOKING:选举中,正在寻找leader,即将进入leader选举流程中。
FOLLOWING:跟随者,表示当前集群中的leader已经选举出来了,主要具备以下几个功能点       向leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息),接收leader消息并进行处理;接收client发送过来的请求,如果为写请求,会发送给Leader进行投票处理,然后返回client结果。
OBSERVING:OBSERVING和FOLLOWING差不多,但不参加投票和选举,接受leader选举后的结果。

标识

SID:server ID,集群中节点的唯一标识,来源于myid文件中定义的数值。
ZXID:zookeeper TRX ID zookeeper的事务ID,高32位为epoch编号,低32位为客户端全局请求次数。
epoch:集群选举编号,每进行一次选举,epoch递增1,一次选举中,epoch是相同的,但是一次故障可能会发生多次选举,所以早期的选举会被忽略。

启动时选举

假设集群节点部署情况如下:

Server1启动:发起一次选举,投自己一票,此时Server1票数不够半数2.5以上,无法完成选举,Server1状态保持LOOKING状态。

Server2启动:发起一次选举,Server2投自己一票,并和Server1交换投票信息,Server1发现Server2的myid大于自己,投Server2一票,此时Server2得2票,Server1得0票,由于没有大于半数2.5以上的选票,无法完成选举,Server1和Server2都保持LOOKING状态。

Server3启动:发起一次选举,Server3给自己投一票,同时和Server1、Server2交换投票信息,由于Server3的myid最大,所以Server1和Server2将票都投给Server3,此时Server3获得3票,Server1、Server2都是0票,由于3票大于半数2.5票,Server3当选leader,Server1和Server2成为follower。

Server4启动:发起一次选举,Server4给自己投一票,和Server1、Server2、Server3交换投票信息,发现Server3已经是leader,直接结束选举,修改自身状态为follower。

Server5启动:发起一次选举,Server5给自己投一票,和Server1、Server2、Server3、Server4交换投票信息,发现Server3已经是leader,直接结束选举,修改自身状态为follower。

运行时选举

zookeeper在运行时,leader和follower各司其职,如果运行时有机器加入,不会触发选举,如果运行时follower故障,也不会触发选举,只有当leader故障时,才会触发选举。运行时选举要同时比较epoch,ZXID,SID,且权重值依次递减,一次选举过程中,参与者的epoch是相同的,但是可能会同时发生多次选举,此时,epoch小的会被忽略,当epoch相同时(绝对会有多个相同的),ZXID大的胜出,ZXID相同的,SID大的胜出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值