《Zookeeper》源码分析(十六)之 Leader是如何运行的

Leader

Leader选举结束后,成为leader的服务器开始进行leader的工作,过程如下:
在这里插入图片描述

从源码中看出,第一步先创建Leader实例,第二步调用Leader.lead()方法,Leader的所有工作都在lead()方法中。

创建Leader实例

创建Leader实例的过程中:

  1. 创建LeaderZookeeperServer实例,LeaderZookeeperServer定义了一系列Processor用于处理请求
  2. 获取leader服务器的地址,默认下只有一个地址,如果开启了zookeeper.multiAddress.enabled并且定义了多个服务器地址如server.1=localhost:2888:3888|localhost:2891:3891,那么会有多个服务器地址用于与learner建立通信连接。
  3. 将第1步中创建的LeaderZookeeperServer实例设置到Leader的zk参数

源码过程如下:
在这里插入图片描述

lead()

进入lead()就表示leader的工作正式开始,它的工作如下:

  1. 加载本地数据,包括session和data
  2. 启动LearnerCnxAcceptor,该过程会创建与集群中所有learner服务器的连接,该连接用于learner服务器的请求通信。连接建立后会进行一系列的初始化工作,包括确认epoch、确认新leader、leader与learner的数据同步,初始化工作完成后开始监听工作,监听所有来自learner服务器的请求。
  3. 等待learner确认选举轮次epoch,第2步建立连接后leader会向learner服务器发送epoch信息
  4. 等待集群learner确认leader,第2步建立连接后会向learner服务器发送新leader的信息
  5. 启动LeaderZookeeperServer
  6. 执行leader的工作,包括定期检查Leader资格、向learner发送ping

源码过程如下:
在这里插入图片描述

Leader的工作流程大体如此,后文逐一分析这个过程中涉及到的类:

  1. LeaderZooKeeperServer
  2. LearnerCnxAcceptor
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值