本节大概的讲解单机版服务端启动过程 服务端整体架构如下图 服务端架构 图中的SessionTracker,FileTxnSnapLog,FileTxnLog,FileSnap,DataTreem,SessionTracker已经在前面讲解过 单机版server启动概述单机版服务器的启动其流程图如下 单机版server启动 上图的过程可以分为预启动和初始化过程。 单机版server启动过程详解预启动源码主要参照 预启动 1.统一由QuorumPeerMain作为启动类无论单机或集群,在zkServer.cmd和zkServer.sh中都配置了QuorumPeerMain作为启动入口类。 2. 解析配置文件zoo.cfgzoo.cfg配置运行时的基本参数,如tickTime、dataDir、clientPort等参数。 3.创建并启动历史文件清理器DatadirCleanupManager对事务日志和快照数据文件进行定时清理。 4.判断当前是集群模式还是单机模式启动。若是单机模式,则委托给ZooKeeperServerMain进行启动。 5.再次进行配置文件zoo.cfg的解析6.创建服务器实例ZooKeeperServer。Zookeeper服务器首先会进行服务器实例的创建,然后对该服务器实例进行初始化 预启动源码上面1-4部分,源码在org.apache.zookeeper.server.quorum.QuorumPeerMain#initializeAndRun中 预启动1-4步骤 5部分在org.apache.zookeeper.server.ZooKeeperServerMain#main中 public static void main(String[] args) {
ZooKeeperServerMain main = new ZooKeeperServerMain();try {
main.initializeAndRun(args);//单机版启动}
... 6部分在org.apache.zookeeper.server.ZooKeeperServerMain#initializeAndRun中 预启动步骤6 红框以下的就是下面的初始化步骤 初始化初始化源码从 包含有 zk server初始化 1. 创建服务器统计器ServerStats。ServerStats是Zookeeper服务器运行时的统计器。 2.创建Zookeeper数据管理器FileTxnSnapLogFileTxnSnapLog是Zookeeper上层服务器和底层数据存储之间的对接层,提供了一系列操作数据文件的接口,如事务日志文件和快照数据文件。Zookeeper根据zoo.cfg文件中解析出的快照数据目录dataDir和事务日志目录dataLogDir来创建FileTxnSnapLog。 3.设置服务器tickTime和会话超时时间限制。4.创建ServerCnxnFactory。通过配置系统属性zookeper.serverCnxnFactory来指定使用Zookeeper自己实现的NIO还是使用Netty框架作为Zookeeper服务端网络连接工厂。 上面四部分的源码都在org.apache.zookeeper.server.ZooKeeperServerMain#runFromConfig中 初始化的1-4步 5. 初始化ServerCnxnFactory。Zookeeper会初始化Thread作为ServerCnxnFactory的主线程,然后再初始化NIO服务器。
6. 启动ServerCnxnFactory主线程进入Thread的run方法,此时服务端还不能处理客户端请求。 7. 恢复本地数据。启动时,需要从本地快照数据文件和事务日志文件进行数据恢复。 6和7部分的代码在 初始化6-7步 8. 创建并启动会话管理器。Zookeeper会创建会话管理器SessionTracker进行会话管理。 9. 初始化Zookeeper的请求处理链。Zookeeper请求处理方式为责任链模式的实现。会有多个请求处理器依次处理一个客户端请求,在服务器启动时,会将这些请求处理器串联成一个请求处理链。 10.注册JMX服务。Zookeeper会将服务器运行时的一些信息以JMX的方式暴露给外部。 11.注册Zookeeper服务器实例。将Zookeeper服务器实例注册给ServerCnxnFactory,之后Zookeeper就可以对外提供服务。 8-11步骤在 初始化8-11步 问题历史文件清理器DatadirCleanupManager如果把日志清除了,会不会出现server挂了然后恢复不了的情况 |
|
来自: liang1234_ > 《Zookeeper》