zookeeper服务端源码解析
-
服务端以QuorumPeerMain中的main方法 入口作为开始
-
main方法中执行initializeAndRun作为初始化和启动的核心方法
-
获取封装zk的配置信息config 底层调用了parseProperties 将配置文件中的各项配置封装到QuorumPeerConfig对象中 用于后期初始化调用获取相关的配置
-
DatadirCleanupManager 启动定时任务 对过期的快照删除(默认该功能是关闭的) 默认zk会保留3天的快照
-
-
初始化通信组件 runFromConfig
- 创建ServerCnxnFatory,默认通过NIO的形式 也支持Netty(NettyServerCnxnFactory) 并调用cnxnFactory.configure完成通信组件的配置启动socke绑定默认端口2181
- 创建ServerCnxnFatory,默认通过NIO的形式 也支持Netty(NettyServerCnxnFactory) 并调用cnxnFactory.configure完成通信组件的配置启动socke绑定默认端口2181
-
初始化QuorumPeer对象并将config中的各种配置进行设置进去,如myid tickTime等等 并设置zk的存储和通信组件
-
初始化和启动zk
-
初始化 initialize 初始化auth server 和 learner
-
启动 start 加载zk数据 启动通信组件 开始选举
-
loadDataBase方法负责加载从磁盘中snap快照恢复到内存中 加载事务日志
-
startServerCnxnFactory启动了三个线程 AcceptThread 负责接受新连接并且分配给SelectorThreads线程 SelectorThreads负责处理AcceptThread的链接和IO操作 ConnectionExpirerThread 负责关闭一些session过期的连接
-
startLeaderElection 开始leader选举
-
首先判断节点是不是LOOKING状态 默认就是LOOKING 如果是LOOKING状态通过myid 最大事务ID Zxid 和当前Epoch生成选票对象
-
创建发送选票和接受选举结果的socket
-
开始选举 创建QuorumCnxManager 用于跟其他zk节点的选票交互 底层使用了FastLeaderElection 作为选举算法
-
-
-
调用join方法将线程挂起
-