Zookeeper服务器启动过程(单机)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asty9000/article/details/85494929

预启动

1.统一由QuorumPeerMain作为启动类。无论单机版还是集群模式启动Zookeeeper服务器,在zkServer.cmd和zkServer.sh两个脚本中,都配置了使用org.apache.zookeeper.server.quorum.QuorumPeerMain作为启动入口类。

2.解析配置文件zoo.cfg。ZooKeeper首先会对zoo.cfg文件进行解析。该文件配置了Zookeeeper运行时的基本参数,包括tickTime、dataDir和ClientPort等参数。

3.创建并启动历史文件清理器DatadirCleanupManager。3.4.0版本开始,ZooKeeper增加了自动清理历史数据文件的机制,包括对事务日志和快照数据文件进行定时清理。

4.判断当前是集群模式还是单机模式的启动。ZooKeeper根据步骤2解析出的集群服务器地址列表来判断当前是集群模式还是单机模式,如果是单机模式就委托给ZooKeeperServerMain进行启动处理。

5.再次进行配置文件zoo.cfg的解析。

6.创建服务器实例ZooKeeperServer。org.apache.zookeeper.server.ZooKeeperServer是单机版ZooKeeper服务端最核心的实体类。ZooKeeper服务器首先会进行服务器实例的创建,之后的步骤则是对该服务器实例的初始化工作,包括连接器、内存数据库和请求处理器等组件的初始化。

初始化

1.创建服务器统计器ServerStats。ServerStats是ZooKeeper服务器运行时的统计器,包含了最基本的运行时信息。

packetsSent:从启动开始或最近一次重置统计信息后,服务端向客户端发送的响应包次数。packetsReceived:从启动开始或最近一次重置统计信息后,服务端接收到的来自客户端的请求包次数。maxLatency、minLatency、totalLatency:从启动开始或最近一次重置统计信息后,服务端请求处理的最大延时、最小延时以及总延时。count:从启动开始或最近一次重置统计信息后,服务端处理的客户端请求总次数。

2.创建ZooKeeper数据管理器FileTxnSnapLog。FileTxnSnapLog是ZooKeeper上层服务器和底层数据存储之间的对接层,提供了一系列操作数据文件的接口,包括事务日志文件和快照数据文件。ZooKeeper根据zoo.cfg文件中解析出的快照数据目录dataDir和事务日志目录dataLogDir来创建FileTxnSnapLog。

3.设置服务器tickTime和会话超时时间限制。

4.创建ServerCnxnFactory。从3.4.0版本开始,引入Netty。可以通过配置系统属性zookeeper.serverCnxnFactory来指定使用zookeeper自己实现的NIO还是使用Netty框架来作为ZooKeeper服务端网络连接工厂。

5.初始化ServerCnxnFactory。ZooKeeper首先会初始化一个Thread,作为整个ServerCnxnFactory的主线程,然后再初始化NIO服务器。

6.启动ServerCnxnFactory主线程。启动步骤5已经初始化的主线程ServerCnxnFactory的主逻辑(run方法)。此时,客户端能够访问到ZooKeeper的客户端的服务端口2181,但是此时ZooKeeper服务是无法正常处理客户端请求的。

7.恢复本地数据。在ZooKeeper启动的时候,需要从本地快照数据文件和事务日志文件中进行数据恢复。

8.创建并启动会话管理。在ZooKeeper启动阶段,会创建一个会话管理器SessionTracker,主要负责ZooKeeper服务端的会话管理,创建SessionTracker的时候,会初始化ExpirationInterval、nextExpirationTime和sessionWithTimeout,同时还会计算出一个初始化的sessionID。SessionTracker初始化完毕后,ZooKeeper就会立即开始会话管理器的会话超时检查。

9.初始化ZooKeeper的请求处理链。ZooKeeper的请求处理方式是典型的责任链模式的实现,在ZooKeeper服务器上,会有多个请求处理器依次来处理一个客户端的请求。在服务器启动的时候,会将这些请求处理器串联起来形成一个请求处理链。单机版服务器的请求处理链主要包括PreRequestProcessor、SyncRequestProcessor和FinalRequestProcessor三个请求处理器。

10.注册JMX服务。ZooKeeper会将服务器运行时的一些信息以JMX的方式暴露给外部。

11.注册ZooKeeper服务器实例。在步骤6中,ZooKeeper已经将ServerCnxnFactory主线程启动,但此时无法处理客户端请求,因为此时网络层尚不能访问ZooKeeper服务器实例。在经过后续步骤的初始化后,ZooKeeper服务器实例已经初始化完毕,只需要注册给ServerCnxnFactory即可,之后ZooKeeper就可以对外提供正常的服务了。

猜你喜欢

转载自blog.csdn.net/asty9000/article/details/85494929