zookeeper集群选举机制

news/2024/11/19 12:32:00/

Zookeeper选举机制——第一次启动

zookeeper集群三个重要的参数(决定选举结果)

SID 服务器 ID 用来唯一标识一台 ZooKeeper集群中的机器,每台机器不能重 , myid 一致
ZXID :事务 ID ZXID 是一个事务 ID ,用来标识一次服务器状态的变更。 在某一时刻,集群中的每台机器的ZXID 值不一定完全一致,这和ZooKeeper 服务器对于客户端“更新请求”的处理逻辑有关。
Epoch 每个 Leader 任期的代号 。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加

假设现在zookeeper集群有5台机器那么选举机制具体步骤为

  • 1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为 LOOKING;
  • 2)服务器2启动,再发起一次选举。服务器12分别投自己一票并交换选票信息:此时服务器1发现服务器2myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器12状态保持LOOKING
  • 3)服务器3启动,发起一次选举。此时服务器12都会更改选票为服务器3。此次投票结果:服务器10票,服务器20票,服务器33票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器12更改状态为FOLLOWING,服务器3更改状态为LEADING; 
  • 4)服务器4启动,发起一次选举。此时服务器123已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器33票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING
  • 5)服务器5启动,同4一样当小弟。

Zookeeper选举机制——非第一次启动

1 )当 ZooKeeper 集群中的一台服务器出现以下两种情况之一时,就会开始进入 Leader 选举:
  • 服务器初始化启动。
  • 服务器运行期间无法和Leader保持连接。
2 )而当一台机器进入 Leader 选举流程时,当前集群也可能会处于以下两种状态:
  • 集群中本来就已经存在一个Leader
    • 对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
  • 集群中确实不存在Leader
    • 假设ZooKeeper5台服务器组成,SID分别为12345ZXID分别为88877,并且此时SID3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。
SID
EPOCH
ZXID
118
218

4

17
选举 Leader 规则:
EPOCH 大的直接胜出
EPOCH 相同,事务 id 大的胜出
③事务 id 相同,服务器 id 大的胜出

所以sid为2的机器最终被选为的新的leader


http://www.ppmy.cn/news/1198109.html

相关文章

Qt的事件

2023年11月5日,周日上午 还没写完,不定期更新 目录 事件处理函数的字体特点Qt事件处理的工作原理一些常用的事件处理函数Qt中的事件类型QEvent类的type成员函数可以用来判断事件的类型事件的类型有哪些?有多少种事件类 事件处理函数的字体特…

读书笔记:彼得·德鲁克《认识管理》第4章 企业是什么

一、章节内容概述 企业的宗旨不是赚取利润。利润是有必要的,也是一种社会责任。不论社会的经济制度和法律规定如何,企业必须有足够利润来应对当前的经济资源用于不确定的未来的风险;为未来的工作创造资本;支付社会的所有非经济需求,包括国防…

storm安装手册及笔记

图解Storm相关概念 图解storm的并发机制 安装Storm的步骤 1、安装一个zookeeper集群 2、上传storm的安装包,解压 3、修改配置文件storm.yaml #所使用的zookeeper集群主机 storm.zookeeper.servers: - "weekend05" - "weekend06"…

【SoC基础】Arduino从零入门

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

语义分割准确率计算

目录 pytorch版 pytorch准确率,miou: sklearn版 pytorch版 """ reference from: https://github.com/LeeJunHyun/Image_Segmentation/blob/master/evaluation.py """import torch# SR : Segmentation Result # GT : Ground Truthdef get_a…

什么是协议栈? 用户态协议栈设计(udp协议栈)

什么是协议栈呢? (协议栈(Protocol Stack)是计算机网络和通信系统中的一个重要概念,它指的是一组协议层的层次结构,这些协议层一起协同工作,以便在不同计算机或设备之间实现数据通信和交换。每…

【入门Flink】- 06Flink作业提交流程【待完善】

Standalone 会话模式作业提交流程 代码生成任务的过程: 逻辑流图(StreamGraph)→ 作业图(JobGraph)→ 执行图(ExecutionGraph)→物理图(Physical Graph)。 作业图算子链…

【Spring源码分析】BeanFactory系列接口解读

认识Bean工厂 一、认识Bean工厂BeanFactoryListableBeanFactoryHierarchicalBeanFactoryAutowireCapableBeanFactoryConfigurableBeanFactoryConfigurableListableBeanFactory 二、总结 一、认识Bean工厂 Spring Bean 工厂是Spring框架提供的一种机制,用于创建和管理…