ZooKeeper

ZooKeeper源码分析(一)启动

通过zkServer.sh启动ZooKeeper时,应用的统一入口为QuorumPeerMain。此处Quorum的含义是“保证数据冗余和最终一致的机制”,Peer表示集群中的一个平等地位节点。

QuorumPeerMain会做一个判断,当使用配置文件(args.length == 1)且配置的Server的个数大1于时,启动集群形式QuorumPeer,否则启动单机模式ZooKeeperServer。这里还启动了DatadirCleanupManager,用于清理早期的版本快照文件。

一、集群模式

runFromConfig()中创建并配置QuorumPeer,以及处理网络通信的ServerCnxnFactory,最终通过quorumPeer.start()启动

start方法将完成以下工作

  1. 初始化数据库
  2. 启动IO线程
  3. 进行Leader选举
  4. 启动QuorumPeer主线程

其中NIOServerCnxnFactory内部包含一个Thread,而QuorumPeer继承了Thread

二、单机模式

单机模式执行了ZooKeeperServerMain的initializeAndRun()

创建了ZooKeeperServer和ServerCnxnFactory,不同的是这里通过cnxnFactory.startup(zkServer)来启动

startup方法将完成以下工作

  1. 启动IO线程
  2. 初始化数据库
  3. 启动ZooKeeperServer主线程

两种模式下IO线程的启动,最终都是调用了 ServerCnxnFactory的start()方法,启动一个负责网络通信的server。

文中提到的核心类包括

  1. QuorumPeerMain
  2. QuorumPeer
  3. QuorumPeerConfig
  4. ZooKeeperServerMain
  5. ZooKeeperServer
  6. ServerConfig
  7. DatadirCleanupManager
  8. ServerCnxnFactory

下一篇将着重介绍ServerCnxnFactory的实现方式。

 

© 2014 - 2015, 高飞航.cn. 版权所有.

About gaofeihang

开发工程师,本站的作者。欢迎留下您宝贵的意见!

发表评论

电子邮件地址不会被公开。 必填项已用*标注