Zookeeper之领导者选举算法源码分析

Zookeeper之领导者选举算法源码分析,第1张

QuorumPeer继承了ZooKeeperThread线程类

orgapachezookeeperserverquorumQuorumPeer#run

本地或远程注册

在循环内根据不同的状态运行

1、readonlymode

首先判断只读模式是否打开readonlymodeenabled默认是false

2、进行领导者选举

表示:zk1、zk2、zk3三台zk服务端(myid1=1、epoch1当前届数、zxid1是当前zk1服务的状态信息)。图中连线0表示把投给自己的选票并放入sendqueue队列中,图中连线1表示发送给其他参与者(即是调用sendNotifications方法),2表示从recvqueue接收队列获取的选票与当前服务器持有选票进行比较。

orgapachezookeeperserverquorumFastLeaderElection#lookForLeader

1、第一次启动,默认投自己,并更新当前服务协议的领导者信息的值proposedLeader、proposedZxid、proposedEpoch

4、从recvqueue不断获取收到的投票信息

其他服务器的投票或投给自己的都放到这里

②、connectAll建立连接

orgapachezookeeperserverquorumQuorumCnxManager#connectAll

orgapachezookeeperserverquorumSyncedLearnerTracker#hasAllQuorums

是否过半判断

领导者角色已经确立,其他服务器启动角色处理

recvqueue数据是从MessengerWorkerReceiver线程不断获取的

1、WorkerReceiver#run

orgapachezookeeperserverquorumFastLeaderElectionMessengerWorkerReceiver#run

2、不是有效的投票者

!validVoter(responsesid)表示是观察者

这里也进行了处理,把当前current的投票放入到sendqueue并返回给当前启动的那台服务器(通过responsesid)

把当前服务得到的currentVote放入到sendqueue队列,并返回发送给这台服务器

1、FOLLOWING节点挂了一半

orgapachezookeeperserverquorumLeader#lead

不断向learners节点ping,如果挂了一半则会跳出循环leaderlead();阻塞被解除

orgapachezookeeperserverquorumQuorumPeer#updateServerState

领导者选举算法核心就是把选票封装并放入到sendqueue集合发送,通过recvqueue得到其他服务节点的选票。并不断比较PK,更改选票并不断发送,并验证是否过半。如果过半则选举出来领导者。

领导者选举触发情况:刚启动、FOLLOWING节点挂了一半、LEADING节点挂掉

怎么提取这个视频的源代码?网址是:>

帮你找了YOUKU的 >

以上就是关于Zookeeper之领导者选举算法源码分析全部的内容,包括:Zookeeper之领导者选举算法源码分析、手机浏览器里面的sid是么事东西啊为什么会过期啊过期了应该么办、怎么提取这个视频的源代码网址是:http://video.baidu.com/tdi=65394391_65394390&pos=1&word=%B0%AE%C等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10148682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存