ZooKeeper_13_服务启动

Leader和Follower服务器启动期交互过程


挑重点,原书还讲解了单机、集群服务器的启动过程,我这里就跳过了..

我们来看下集群服务器启动过程中Leader服务器与Follower服务器之间的交互

这里默认集群服务器已经完成了Leader选举,集群中的服务器,角色都已经确定。


(图不画了,直接用原书中的图)

ZooKeeper_13_服务启动_第1张图片


Leader和Follower服务器启动期交互过程


1. 创建Leader和Folower服务器

完成Leader选举之后,每个服务的角色都已经确定,开始创建自身相应的服务器实例,并开始进入各自角色的主流程。


2. Leader服务器启动Follower接收器(LearnerCnxAcceptor)

在ZooKeeper集群运行期间,Leader服务器需要和所有其余的服务器(下面使用"learner"表示)保持连接以确定集群中的机器存活情况。

Follower接收器(LearnerCnxAcceptor)用于负责接收所有非leader服务器的连接请求。


3. learner服务器开始和leader服务器建立连接

所有的Learner服务器启动完毕之后,会与leader选举的投票结果中找到当前集群中的Leader服务器,然后与其建立连接。

简单地说,就是将learner服务器的信息注册到leader服务器中。


4. Leader服务器创建LearnerHandler

leader服务器接收到来自其他机器的连接创建请求之后,会创建一个LearnerHandler实例。

每个LearnerHandler实例都对应了一个Leader与Learner服务器之间的连接。

他负责Leader和Learner服务器之间几乎所有的消息通知和数据同步。


5. 向Leader注册

当learner服务于Leader建立起连接之后,Learner就会向Leader进行注册。

所谓的注册其实就是将Learner服务器自己的基本信息发送给Leader服务器。

我们称之为LearnerInfo,包括当前服务器的SID和服务器处理的最新的ZXID。


6. Leader解析Learner信息,计算新的epoch


7. 发送leader状态

计算出新的epoch之后,Leader会将该信息以一个LEADERINFO消息的形式发送给learner,同时等待Learner的响应。


8. Learner发送ACK消息

learner在接收到leader的消息之后,解析出epoch和ZXID,然后向Leader反馈一个ACKEPOCH


9. 数据同步


10. 启动Leader 和 Learner服务器

你可能感兴趣的:(zk,zookeeper,zookeeper_Java,分布式,学习笔记,ZooKeeper_学习笔记)