zookeeper的选主过程

举报
浅羽技术 发表于 2022/09/29 00:11:58 2022/09/29
【摘要】 zookeeper的选主过程1 . 接收投票消息。投票消息会包括id,zxid,epoch,state,这四种信息,分别代表Id: 唯一标识一台机器,存储在myid文件中Zxid: 标识了本机想要选举谁为leader,是本机目前所见到的最大的id值Epoch: 逻辑时钟。用于判断选举是否过期State: 本机的状态信息(包括looking,leading,following,observi...

zookeeper的选主过程

1 . 接收投票消息。投票消息会包括id,zxid,epoch,state,这四种信息,分别代表

Id: 唯一标识一台机器,存储在myid文件中

Zxid: 标识了本机想要选举谁为leader,是本机目前所见到的最大的id值

Epoch: 逻辑时钟。用于判断选举是否过期

State: 本机的状态信息(包括looking,leading,following,observing)

2 .判断PeerState状态,如果是looking状态,则继续.如果是leading,foolowing,observing则走别的流程

3 .收到票后,会判断发送过来的逻辑时钟是否大于目前的逻辑时钟,如果是说明集群已经进入了新一轮的投票了。

4 .清空投票箱。因为这个之前的投票都是上一次投票期间维护的。

5 . 如果等于目前的逻辑时钟,说明是当前的,则更新最大的leader id和提案id

判断是否需要更新当前自己的选举情况.在这里是根据选举leader id,保存的最大数据id来进行判断的,这两种数据之间对这个选举结果的影响的权重关系是:首先看数据id,数据id大者胜出;其次再判断leader id,leader id大者胜出

判读投票结果代码

6 . 发送通知,通知其他的QuorumPeer更新leader信息.同时将更新后的leader信息放入投票箱

检查是否已经接收到了所有服务器的投票代码参考。如果是的,则设置自己的选择结果

如果没有接收到所有服务器的投票,那判读这个leadId是否得到了一半以后的服务器的投票代码参考,如果是则返回

以上流程描述的是在zookeeper中,参考使用的算法是FastLeaderElection

在zookeeper的的选主的流程,另外还提供了LeaderElection和AuthFastLeaderElection的实现

LeaderElection的实现比较简单。以(id,zxid)做为投票的依据.并且它的实现是同步的,需要等待所有服务器返回后再统计结果。

而相比FastLeaderElection是每次收到回复都会计算投票结果,效率上会比LeaderElection更好一些

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。