栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

4-ZooKeeper选举机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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。

启动时选举

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

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相同的,ZXID大的胜出,ZXID相同的,SID大的胜出。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号