zookeeper源码解析--观察者
2022/1/14 1:03:49
本文主要是介绍zookeeper源码解析--观察者,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述
观察者不参与选举,观察者身份是在集群配置文件中指定的自身角色。
主干逻辑–observerLeader
1.设置自身Zab状态为DISCOVERY 2.寻找主节点 集群配置里,配置了观察者监听端口下。 集群每个投票成员,有义务在此监听端口开启监听。 供观察者与其连接,并作为主节点,与观察者进行交互。 3.与主节点建立连接。 4.向主节点注册。 注册包: 类型--OBSERVERINFO zxid-高32位为epoch,低32为为计数。默认acceptedEpoch,计数为0。 LearnerInfo: 自己在集群的id 版本:0x10000 集群配置版本 5.读取主节点回复 情况1:类型为LEADERINFO回复包: 类型:LEADERINFO zxid-得到回复zxid中epoch。 版本: 采用回复中epoch作为自己的acceptedEpoch。 向主节点发回回复包。 回复包类型:Leader.ACKEPOCH, zxid:lastLoggedZxid【自身数据实体的最后zxid】 epoch:epochBytes【自身currentEpoch信息】 返回zxid,由主节点回复中的epoch&序号0组合而成。 情况2:类型为NEWLEADER 采用回复中epoch作为自己的acceptedEpoch。 返回回复包中zxid 6.设置Zab状态为SYNCHRONIZATION 7.与主节点同步。 读取包 情况1:读取包的类型为DIFF 设置同步模式为DIFF 视情况设置快照是否需要标志 情况2:读取包的类型为SNAP 设置同步模式为SNAP 从输入流进行反向序列化从而完成快照同步 实体数据的集群配置信息设置为自己可见版本 设置数据实体的最后zxid【最后zxid来自包】 设置同步快照标志为true 情况3:读取包的类型为TRUNC 设置同步模式为TRUNC 对数据实体按数据包的zxid进行日志截断 设置数据实体的最后zxid【最后zxid来自包】 情况4: 记录日志 退出 以自身可见集群配置信息设置数据实体配置信息 创建会话追踪 循环迭代: 读取包 情况1:包的类型为Leader.PROPOSAL 情况2:包的类型为Leader.COMMIT 情况3:包的类型为Leader.INFORM 情况4:包的类型为Leader.UPTODATE 情况5:包的类型为Leader.NEWLEADER 情况4:
这篇关于zookeeper源码解析--观察者的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南