Zookeeper选举Leader源码剖析(一)

目录

 1.源码下载

 2.启动ledaer选举流程


1.启动或leader宕机选举流程

2.客户端与服务端交互流程(NIO或Netty)

3.写入数据的ZAB一致性协议(如何保证消息的顺序性)

4. Watch监听触发机制

 1.源码下载

 https://github.com/apache/zookeeper.git

 从代码切入,从zkServer.sh文件切入 

 

 指定程序参数,启动QuorumPeerMain.java的main函数

 

 第二种启动方式

ZooKeeperMain,加入以下启动参数

 

搭建zookeeper集群,正常打开会提示每一台哪台是leader,哪台是flower

 

 2.启动ledaer选举流程

1. 第一台机器投自己一票发给其他机器,其他机器也会给自己投一票发给其他机器,看哪台zxid大,但第一轮投票选举zxid都是0,所以继续比较myid哪个大,第一轮都投的myid=2的大,优胜者进入下一轮选举

2.myid=1和myid=2的都投的myid为2的机器,确定(2,0)为优胜者

 

 源码入口

  解析配置文件到内存,清理快照文件任务,核心启动流程runFromConfig方法。

默认使用NIO加载配置,也可以使用如下图所示用netty启动

 初始化Qrorum参数,内部使用node对象生成

启动

 

 

 加载netty参数

 

默认 启动jetty,端口8080,运维使用

 

 启动leader选举

 默认server状态:looking

 

 

 看最后的选举算法

 默认跳过,看3的选举算法

 

启动一个选举端口用于监听选票信息 

 

 

发选票的两个线程

 

 

 上面都是一些线程监听的方法,super.start才是真正选举的方法。

 核心选举逻辑:

        1.开始状态:Looking

 

核心选举策略:fastLeaderElection 

 

 更新选票消息,发送消息,在debug时可能跟到sendqueue.offer方法就没了,我们要知道上面还有一个poll方法拿队列里的消息。 

 

 

 

 manager.connectAll:建立socket连接

 

 

 

  • 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、付费专栏及课程。

余额充值