合聚咖

合聚咖

Zookeeper单机模式启动

admin

从今天开始,将陆续发布一些关于Zookeeper的文章,敬请期待。

启动Zookeeper时,核心入口为QuorumPeerMain。Quorum表示数据冗余和最终一致性机制,Peer为集群中等效节点。判断依据是配置文件的使用和集群配置,若满足则启动集群形式的QuorumPeer,否则启动单机模式的ZooKeeperServer。启动后,系统自动运行DatadirCleanupManager,用于清理早期版本的快照文件。

接下来详细解析单机模式启动过程。

ZooKeeperServerMain的initializeAndRun方法负责启动流程。命令参数分为集群模式与单机模式两种情况。接下来介绍几个常用的配置项。

MetricsProvider组件负责收集指标并将值发送到外部设备。在server端和client端共享数据。

FileTxnSnapLog作为ZooKeeper上层与底层数据存储间的桥梁,提供数据文件操作接口,包含事务日志文件与快照数据文件。根据dataDir与snapDir创建。

主要方法包含事务日志与快照数据文件的创建与管理。

创建CountDownLatch用于watch zk状态,当zk关闭或出现内部错误时,优雅关闭服务。ZooKeeperServerShutdownHandler组件处理异常,使用CountDownLatch通知其他线程停止工作。

AdminServer内置Jetty服务,用于管理ZooKeeperServer,有两种实现方式。默认开启,通过设置zookeeper.admin.enableServer关闭。

早期版本自实现NIO框架,3.4.0引入Netty,通过zookeeper.serverCnxnFactory指定网络连接工厂。考虑安全配置,决定zk服务器是否安全启动。

服务器启动时,自动进行本地数据恢复,从快照和事务日志文件中加载数据。

创建并启动会话管理器SessionTracker,负责会话管理,包括设置expireInterval、NextExpirationTime、SessionWithTimeout,以及初始化SessionID。

请求处理链由多个处理器串联,典型为PrepRequestProcessor、SyncRequestProcessor、FinalRequestProcessor,处理客户端请求。

ZooKeeper将服务器运行信息暴露给外部,以JMS方式。

创建定时清理容器节点管理器,负责清理容器节点下不存在子节点的容器节点等任务。