zookeeper选举算法详讲

一.zookeeper选择过程中的服务状态

FOLLOWING:追随状态.负责读,同步leader的数据.

LOOKING:竞选状态,参与选举成为leader

LEADING:领导状态,负责写,同步数据到follower

OBSERVING:观察状态,不参与竞选.

二.zookeeper的投票的数据结构

logicalclock:第几场选举

state:selft_id的服务的服务状态

self_id:标识哪个服务

self_zxid:服务的zxid

vote_id:选举哪个服务为leader

vote_zxid:选举为leader服务的zxid

刚启动服务时,是如何投票选举的?

投票规则:首先看是第几轮,如果相同,就比较zxid,大的胜出,如果zxid一样,最后比较myid,也是打的胜出.最后获得票数大于一半的成为leader,选举结束.

  部署zookeeper的时候,假如部署5台机器,my_id分别是1,2,3,4,5.机器分别也是1-5.

当1服务启动的,会为自己投一票,数据存储结构是(第几轮投票,投票的my_id,被选举的my_id),所以id为1的存储的数据为(1,1,1).发送投票信息给其他zookeeper应用,没有收到响应.没有超过半数通过,状态为LOOKING.

当2服务启动的,会为自己投一票,id为2的存储的数据为(1,2,2).发送投票信息(myid,zxid,logicalclock)给其他zookeeper应用,当1服务收到了投票信息,首先看是第几轮投票,都是一样,都是1,接着看zxid,因为没有出现过修改,都一样,都是0,最后看my_id,2比1小,所以把票投给2,清空投票信息,投票信息改为(2,1,2),意思为第二场,myid为1服务的把票投给myid为2的服务.然后发给2服务.2服务发现自己的投票场次小,清空投票信息,2服务修改投票信息为(2,1,2)(2,2,2).意思是第二场,1号服务投给自己,第二个括号的数据是第二场,自己投给自己.没有满足半数通过,修改服务状态为LOOKING

当3服务启动时候,把自己的投票信息改为(1,3,3),然后发送投票信息(1,3,3)给其他服务.1服务接收后,清空投票信息,投票信息改为(3,1,3),同时发送给3服务.2服务接收到,清空投票信息把投票信息修改为(3,2,3),同时发自己的投票信息发给3服务.3服务接收到1和2服务的投票信息,把自己的投票信息改为(3,3,3)(3,1,3)(3,2,3),投票数目超过机器的一半,同时标记自己的服务状态为LEADING,把自己的选举信息发给其他服务,其他服务接收到信息,发现自己的投票数目没有超过一半,修改自己的服务状态为FOLLOWING.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值