前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zookeeper选举机制

Zookeeper选举机制

作者头像
搬砖俱乐部
发布2019-11-01 15:11:31
4380
发布2019-11-01 15:11:31
举报
文章被收录于专栏:BanzClubBanzClub

Leader选举是保证Zookeeper集群数据一致性的关键,只有Leader确定的情况下,集群才可以对外提供服务,通常分为启动时Leader选举和运行时Leader选举。

启动时选举

首先,每一个节点都会向其他所有节点发出一个投票,投票形式为(myId,ZXID)。由于是全新的集群,ZXID都为0,所以,各个节点的投票形式如:node01为(1,0),node02为(2,0),node03为(3,0);

然后,每个节点将对收到其他机器的投票进行校验:

  • 判断是否是本轮投票;
  • 判断是否来自LOOKING状态的服务器;

如果投票有效,则需要与自己的投票进行PK,PK策略:

  • ZXID大的胜出;
  • ZXID相同,比较myId,myId大的胜出;

对于node01来说,接收到node02、node03的投票,先比较node02,node02胜出,将自己选票更新为(2,0),向其他节点发送出去;

node02也接收到了node01、node03的投票,先比较node01,发现自己胜出,不改变投票;

此时,统计票数,发现投node02的节点个数为2,大于集群的半数,所以,会将node02选做leader,其他节点为follower。

运行时选举

首先,需要生成投票,每个节点仍然是向所有其他节点发出一个投票信息。由于集群运行了一段时间,所有,每个节点的ZXID可能不相同,如:node01为(1,101),node02为(2,100),node03为(3,100);

然后,每个节点收到其他机器的选票要进行PK,策略依旧。

对于node01来说,收到node02、node03的投票,PK发现,都是node01胜出;

node02收到node01、node03的投票,发现也是node01胜出,则更新自己的选票为(1,101);

此时,统计票数,发现投node01的节点个数为2,大于集群的半数,所以,会将node01选做leader,其他节点更新状态为follower。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BanzClub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档