Zookeeper选举Leader源码剖析(二)

maven版本尽量3.5版本以上,jdk1.8

 1.选举流程

如果其他服务器sid小于自己的sid,直接关闭socket连接,这么做的原因是为了减少连接

 如果相同,打印警告信息,如果远端sid大于自己的sid,建立发送线程,接收线程

 

 sendWorker.start,直接看run方法逻辑:
从阻塞队列中拿到消息

1.2 recver.run方法

读取远端服务器socker消息

 

整体选票逻辑,业务层丢入sendqueue-workerSender-queueSendMap发送队列选票消息,然后将选票信息发送到远端服务器和自己的recvWorker接收->recvQueue队列中,生成选票。 

 

wokersender构建选票

 

 mysid等于sid加入到传输层队列,如果不相等丢到queuesendMap中

 

 fastleaderElection选举算法:初始化状态looking

 真实的选票逻辑:newEpoch等于curEpoch,先比较zxid并且比较newID,curId,

updateProposal:更新选票,下次投票投竞争出来的选票

sendNotifications:将选出的选票发送给其他机器

 

 

 termPredicadate:将选出来的选票放入voteSet并且进行半数比较

 

 

 半数比较逻辑:比较投票机器数量是否大于半数half

half:投票数/2

 

 

 

  返回为true以后,如果自己PK赢了,将自己设置为leading,否则,将当前状态设置为following

 

 当一次选举以后状态更改,看leading和following,当第三个机器收到选票会比较当前状态是否是looking,

 

 当第三台机器进来以后会走follwoing和leading,首先比较当前周期,进行上面的选票比较逻辑。最后设置当前选举状态

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bingtanghulu_6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值