zookeeper:启动原理

主类: QuorumPeerMain,
zookeeper:启动原理_第1张图片
其中调用了main对象的initializeAndRun方法,
zookeeper:启动原理_第2张图片
首先定义了QuorumPeerConfig对象,然后调用了parse方法,parse方法代码如下:
zookeeper:启动原理_第3张图片
其中调用的parseProperties方法的代码如下:
zookeeper:启动原理_第4张图片
可以看到,它读取了dataDir和clientPort等配置信息,最后调用了setupQuorumPeerConfig
zookeeper:启动原理_第5张图片
setupQuorumConfig方法代码如下:
zookeeper:启动原理_第6张图片
其中调用的setupMyId的代码如下:
zookeeper:启动原理_第7张图片
可以看到其中通过读取指定目录的myid这个文件来设置id.

返回到initializeAndRun方法,快照清理工作由DatadirCleanManager类来完成,默认保留的快照个数为3(如下图),默认不开启清理。
zookeeper:启动原理_第8张图片
zookeeper:启动原理_第9张图片
如果开启了快照清理,具体的工作由PurgeTask类通过线程池来完成。

回到initializeAndRun方法,
zookeeper:启动原理_第10张图片
接下来执行上面截图中的runFromConfig方法,它的代码如下:
zookeeper:启动原理_第11张图片
zookeeper:启动原理_第12张图片
zookeeper:启动原理_第13张图片
zookeeper:启动原理_第14张图片

可以看到,最后调用了quorumPeer.start(),start方法的代码如下:
zookeeper:启动原理_第15张图片
其中调用的loadDataBase方法用来从快照中读取并加载数据,它的代码如下:
zookeeper:启动原理_第16张图片
zookeeper:启动原理_第17张图片
zookeeper:启动原理_第18张图片
其中调用的loadDataBase代码如下:

zookeeper:启动原理_第19张图片

你可能感兴趣的:(ZooKeeper,zookeeper,分布式,云原生)