Zookeeper详解:Zookeeper集群启动过程和Leader选举

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper详解:Zookeeper集群启动过程和Leader选举相关的知识,希望对你有一定的参考价值。


Zookeeper集群启动过程

预启动

  1. 统一由QuorumPeerMain作为启动类

  2. 读取zoo.cfg配置文件

  3. 创建并启动历史文件清理器DatadirCleanupManager

  4. 判断当前是集群模式还是单机模式

初始化

  1. 创建ServerCnxnFactory,

  2. 初始化ServerCnxnFactory,初始化一个线程,作为整个ServerCnxnFactory的主线程然后在初始化NIO服务器

  3. 创建Zookeeper数据管理器FileTxnSnapLog,

  4. 创建QuorumPeer实例,Quorum是集群模式下特有的对象,是Zookeeper服务器实例的托管者,从集群层面来看QuorumPeer代表了Zookeeper集群中一台服务器,在运行期间它会不断检查当前服务器实例运行的状态。然后根据情况进行Leader选举。

  5. 创建内存数据库ZKDatabase

  6. 初始化QuorumPeer,这里把一些核心组件注册到QuorumPeer,这些核心组件包括FileTxnSnapLog、ServerCnxnFactory和ZKDatabase,同时Zookeeper还会对QuorumPeer配置一些参数,包括服务器地址列表,选举算法和会话超时时间等。

  7. 恢复本地数据库

  8. 启动ServerCnxnFactory主线程

  9. Leader选举

  10. 交互和数据同步(看红色部分)

  11. 创建会话管理器

  12. 初始化Zookeeper的请求处理链

  13. 注册JMX


在Leader选举完成之后会有一个Leader和其他服务器(Follower和Observer 统称Learner学习者)进行交互,大致流程如下:

  1. Leader服务器启动Follower接收器,LearnerCnxAcceptor,来接收所有非Leader服务器的连接

  2. Leader与每一个Learner之间都会有一个LearnerHandler实例对应负载它们之间的消息通信和数据同步

  3. Learner和Leader建立连接后,Learner向Leader注册,就是发送自己的信息给Leader,包括当前服务器的SID和ZXID

  4. Leader解析Learner发来的注册信息,在过半向Leader注册的服务器中找到最大的epoch,然后加1,用于确定当前集群的epoch

  5. Leader发送LEADERINFO给Learner

  6. Learner收到LEADERINFO,解析出epoch和ZXID然后给Leader一个反馈

  7. Leader收到Learner响应之后就开始与其进行数据同步

  8. 启动Leader和Learner服务器,有过半数完成数据同步就可以启动了。


Leader选举


以上是关于Zookeeper详解:Zookeeper集群启动过程和Leader选举的主要内容,如果未能解决你的问题,请参考以下文章

Zookeeper——集群搭建 & 选举机制

storm集群部署和配置过程详解

zookeeper集群安装

zookeeper的leader选举原理和底层源码实现超级详解

Hadoop详解——ZooKeeper详解,ZooKeeper伪分布搭建和集群搭建,Hadoop集群搭建,sqoop工具的使用

Zookeeper架构详解