zookeeper---选举

zookeeper集群启动后,选举leader节点和确定每个节点的角色是数据同步和对外提供服务的前提。因此如何快速有效的选举出leader节点是zookeeper的核心逻辑。本文将结合源码分析zookeeper的选举过程。

一、整体流程

整体流程

 1、zookeeper节点启动后,首先会加载对应路径下的配置文件

 2、然后创建代表自身的QuorumPeer对象,在zookeeper集群中,每个节点都是一个QuorumPeer对象

 3、集群中参与投票的每个节点两两之间会建立长链接,用于选举信息的同步

 4、统计投票结果确定Leader节点。leader节点之外的节点角色分为follower和observer,能够参与投票选举的是follower角色,不参与的是observer角色

二、选举消息收发逻辑

选举消息收发逻辑

      假设zookeeper集群游三个节点组成,用节点1进行距离,投票的收发逻辑如上图所示。左侧是投票的发送流程,右图是选票的接收流程。

三、选举核心逻辑

     选举的核心逻辑封装在FastLeaderElection类中,当节点启动后会调用lookForLeader方法来确定leader节点。内部核心逻辑如下图所示。

lookForLeader核心逻辑

       为了方便查看,分三部分来讲述核心逻辑,中间只描述主干逻辑,逻辑分之这部分简述。左侧流程表示lookForLeader方法的主干逻辑。中间与右侧是左侧图中【统计投票结果】的详细描述,按照接收的选票状态为looking和following或leading两种。

      左侧:lookForLeader主干逻辑:

      1、每一次选举都会有一个选举逻辑周期编号,投票的结果有效的前提是所有节点在一个选举逻辑周期内,进入选举状态时,每个节点都将自身的逻辑周期数字自增加一。当收到投票的选举逻辑周期与自身的不一致时,以数字大的为准。

      2、推荐leader候选人,开始时都会推举自己为leader。每次进行投票都会有唯一的一个事物id进行表示。主进程周期表示一个leader统治的标识,在投票时会将节点所在的leader统治标识一并发送出去。

      3、拟定选票后会将选票广播给集群中所有的节点。

      4、等待其他节点的投票,如果200毫秒内没有接到投票,则重新发送自己的投票或重新连接。

      5、收到投票信息后,根据不同的投票状态,统计投票结果。具体逻辑如中间或者右侧流程。

      6、返回选举结果 

     中间:投票是looking时的处理逻辑

      1、当收到的选票是looking时,表示投票的节点也在进行选举。

      2、如果收到选票的选举逻辑周期小于当前节点的选举逻辑周期,则该票不做投票统计使用;如果大于,则将自身选举逻辑周期设置为收到投票的;等于时选举逻辑周期不用改变

      3、更新节点推荐leader。推荐leader的选择规则是以选举逻辑周期大的为准,选举逻辑周期相同时以选举事物id大的为准,两者都相同时,以节点id大的为准

      4、如果推荐leader有变化,则重新广播投票

      5、如果没有变化则统计投票结果,如果收到的投票的结果已经超过半数,则表示leader已经选出,如果没有超过半数,则继续投票。在统计出超过半数投票的leader结果后会再等待200毫秒,如果没有变化则选出的leader生效

      6、返回投票结果

     右侧:投票是following或leading时的处理逻辑

      1、是follwing或leading时,表示集群中的节点已经得出选举结果,如果等于自身投票逻辑周期时,则根据过半原则获得leader

      2、如果不等于自身投票逻辑周期,则认为其他节点已经选出leader,则直接统计      

      

 

 

 

 

 

 

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;、本 3项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReadmE.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、资 1源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READMe.m文件(如d有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值