Zookeeper选举源码解析

  • 一. Zookeeper选举机制——第一次启动
  • 二. Zookeeper选举机制——非第一次启动
  • 三. Zookeeper选举源码解析
  • ①. 选举准备
  • 1. startLeaderElection()选举准备
  • 2. createElectionAlgorithm()创建选举算法实例
  • 3. 创建 QuorumCnxnManager,负责选举过程中的所有网络通信
  • 4. 启动监听线程listener.start()
  • 5. 准备开始选举
  • 6. 创建各种队列
  • ②. 选举执行
  • 1. super.start()
  • 2. .lookForLeader()
  • 3. 更新选票(serverid, zxid, epoch)
  • 4. 广播选票 sendNotifications()
  • 5. WorkerSender线程
  • 6. 判断如果是发给自己的消息,直接进入自己的 RecvQueue
  • 7. 如果是发给其他服务器,创建对应的发送队列
  • 8. addToSendQueue()
  • 8. connectOne() 发送的服务器节点建立通信连接
  • 9. initiateConnection(sock, sid)
  • 10. startConnection
  • 11. SendWorker发送器
  • 12. 接收器RecvWorker
  • 13. WorkerReceiver


一. Zookeeper选举机制——第一次启动

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动

二. Zookeeper选举机制——非第一次启动

如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_02

三. Zookeeper选举源码解析

如何将zookeeper源码运行起来 zookeeper选举源码_如何将zookeeper源码运行起来_03

①. 选举准备

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_04

1. startLeaderElection()选举准备

如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_05

2. createElectionAlgorithm()创建选举算法实例

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_06


如何将zookeeper源码运行起来 zookeeper选举源码_服务器_07

3. 创建 QuorumCnxnManager,负责选举过程中的所有网络通信

如何将zookeeper源码运行起来 zookeeper选举源码_如何将zookeeper源码运行起来_08


如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_09

4. 启动监听线程listener.start()

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_10

如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_11

5. 准备开始选举

如何将zookeeper源码运行起来 zookeeper选举源码_如何将zookeeper源码运行起来_12


如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_13

6. 创建各种队列

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_14

②. 选举执行

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_15

1. super.start()

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_16

2. .lookForLeader()

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_17


如何将zookeeper源码运行起来 zookeeper选举源码_服务器_18

3. 更新选票(serverid, zxid, epoch)

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_19

4. 广播选票 sendNotifications()

如何将zookeeper源码运行起来 zookeeper选举源码_如何将zookeeper源码运行起来_20


如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_21

5. WorkerSender线程

如何将zookeeper源码运行起来 zookeeper选举源码_如何将zookeeper源码运行起来_22


如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_23


如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_24


如何将zookeeper源码运行起来 zookeeper选举源码_如何将zookeeper源码运行起来_25

6. 判断如果是发给自己的消息,直接进入自己的 RecvQueue

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_26

7. 如果是发给其他服务器,创建对应的发送队列

如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_27

8. addToSendQueue()

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_28

8. connectOne() 发送的服务器节点建立通信连接

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_29


如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_30

9. initiateConnection(sock, sid)

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_31


如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_32

10. startConnection

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_33

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_34

11. SendWorker发送器

如何将zookeeper源码运行起来 zookeeper选举源码_第一次启动_35


如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_36

12. 接收器RecvWorker

如何将zookeeper源码运行起来 zookeeper选举源码_如何将zookeeper源码运行起来_37


如何将zookeeper源码运行起来 zookeeper选举源码_网络通信_38

13. WorkerReceiver

如何将zookeeper源码运行起来 zookeeper选举源码_服务器_39