首页 > 其他 > 详细

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

时间:2018-06-24 16:54:13      阅读:224      评论:0      收藏:0      [点我收藏+]

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选举

原文:http://blog.51cto.com/littledevil/2132214

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!