Zookeeper选举Leader源码剖析(一)

目录

 1.源码下载

 2.启动ledaer选举流程


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

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

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

4. Watch监听触发机制

 1.源码下载

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

Zookeeper选举Leader源码剖析(一)_第1张图片

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

 Zookeeper选举Leader源码剖析(一)_第2张图片

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

Zookeeper选举Leader源码剖析(一)_第3张图片

 Zookeeper选举Leader源码剖析(一)_第4张图片

 第二种启动方式

ZooKeeperMain,加入以下启动参数

Zookeeper选举Leader源码剖析(一)_第5张图片 Zookeeper选举Leader源码剖析(一)_第6张图片

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

 Zookeeper选举Leader源码剖析(一)_第7张图片

 2.启动ledaer选举流程

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

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

 Zookeeper选举Leader源码剖析(一)_第8张图片

 源码入口

Zookeeper选举Leader源码剖析(一)_第9张图片

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

Zookeeper选举Leader源码剖析(一)_第10张图片

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

Zookeeper选举Leader源码剖析(一)_第11张图片

Zookeeper选举Leader源码剖析(一)_第12张图片

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

Zookeeper选举Leader源码剖析(一)_第13张图片

启动

Zookeeper选举Leader源码剖析(一)_第14张图片

 Zookeeper选举Leader源码剖析(一)_第15张图片

 Zookeeper选举Leader源码剖析(一)_第16张图片

 加载netty参数

 Zookeeper选举Leader源码剖析(一)_第17张图片

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

Zookeeper选举Leader源码剖析(一)_第18张图片

 Zookeeper选举Leader源码剖析(一)_第19张图片

 启动leader选举

Zookeeper选举Leader源码剖析(一)_第20张图片

 默认server状态:looking

 

 Zookeeper选举Leader源码剖析(一)_第21张图片

 看最后的选举算法

Zookeeper选举Leader源码剖析(一)_第22张图片

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

 Zookeeper选举Leader源码剖析(一)_第23张图片

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

 Zookeeper选举Leader源码剖析(一)_第24张图片

 Zookeeper选举Leader源码剖析(一)_第25张图片

发选票的两个线程

Zookeeper选举Leader源码剖析(一)_第26张图片 

 Zookeeper选举Leader源码剖析(一)_第27张图片

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

Zookeeper选举Leader源码剖析(一)_第28张图片

 核心选举逻辑:

        1.开始状态:Looking

Zookeeper选举Leader源码剖析(一)_第29张图片

 Zookeeper选举Leader源码剖析(一)_第30张图片

核心选举策略:fastLeaderElection 

Zookeeper选举Leader源码剖析(一)_第31张图片 

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

Zookeeper选举Leader源码剖析(一)_第32张图片 

 Zookeeper选举Leader源码剖析(一)_第33张图片

 Zookeeper选举Leader源码剖析(一)_第34张图片

 manager.connectAll:建立socket连接

Zookeeper选举Leader源码剖析(一)_第35张图片 

 Zookeeper选举Leader源码剖析(一)_第36张图片

 

你可能感兴趣的:(java-zookeeper,zookeeper,java)