Zookeeper详解:Zookeeper集群启动过程和Leader选举
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper详解:Zookeeper集群启动过程和Leader选举相关的知识,希望对你有一定的参考价值。
Zookeeper集群启动过程
预启动
统一由QuorumPeerMain作为启动类
读取zoo.cfg配置文件
创建并启动历史文件清理器DatadirCleanupManager
判断当前是集群模式还是单机模式
初始化
创建ServerCnxnFactory,
初始化ServerCnxnFactory,初始化一个线程,作为整个ServerCnxnFactory的主线程然后在初始化NIO服务器
创建Zookeeper数据管理器FileTxnSnapLog,
创建QuorumPeer实例,Quorum是集群模式下特有的对象,是Zookeeper服务器实例的托管者,从集群层面来看QuorumPeer代表了Zookeeper集群中一台服务器,在运行期间它会不断检查当前服务器实例运行的状态。然后根据情况进行Leader选举。
创建内存数据库ZKDatabase
初始化QuorumPeer,这里把一些核心组件注册到QuorumPeer,这些核心组件包括FileTxnSnapLog、ServerCnxnFactory和ZKDatabase,同时Zookeeper还会对QuorumPeer配置一些参数,包括服务器地址列表,选举算法和会话超时时间等。
恢复本地数据库
启动ServerCnxnFactory主线程
Leader选举
交互和数据同步(看红色部分)
创建会话管理器
初始化Zookeeper的请求处理链
注册JMX
在Leader选举完成之后会有一个Leader和其他服务器(Follower和Observer 统称Learner学习者)进行交互,大致流程如下:
Leader服务器启动Follower接收器,LearnerCnxAcceptor,来接收所有非Leader服务器的连接
Leader与每一个Learner之间都会有一个LearnerHandler实例对应负载它们之间的消息通信和数据同步
Learner和Leader建立连接后,Learner向Leader注册,就是发送自己的信息给Leader,包括当前服务器的SID和ZXID
Leader解析Learner发来的注册信息,在过半向Leader注册的服务器中找到最大的epoch,然后加1,用于确定当前集群的epoch
Leader发送LEADERINFO给Learner
Learner收到LEADERINFO,解析出epoch和ZXID然后给Leader一个反馈
Leader收到Learner响应之后就开始与其进行数据同步
启动Leader和Learner服务器,有过半数完成数据同步就可以启动了。
Leader选举
以上是关于Zookeeper详解:Zookeeper集群启动过程和Leader选举的主要内容,如果未能解决你的问题,请参考以下文章
zookeeper的leader选举原理和底层源码实现超级详解
Hadoop详解——ZooKeeper详解,ZooKeeper伪分布搭建和集群搭建,Hadoop集群搭建,sqoop工具的使用