当前位置: 首页 > article >正文

【大数据学习 | Zookeeper】Zookeeper的选举机制

zookeeper的选举机制分为第一次启动和非第一次启动两种情况。

1. 选举机制 - > 第一次启动

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

2. 选举机制 - > 非第一次启动

(1)当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:

  • 服务器初始化启动。
  • 服务器运行期间无法和Leader保持连接。

(2)而当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:

  • 集群中本来就已经存在一个Leader。对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
  • 集群中确实不存在Leader。

假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,
3和5服务器出现故障,因此开始进行Leader选举。

                             (EPOCH, ZXID, SID)     (EPOCH, ZXID, SID)    (EPOCH, ZXID, SID) 

                             (1, 8, 1)                                (1, 8, 2)                         (1, 7, 4)

选举LEADER规则:

  • EPOCH大的直接胜出。
  • EPOCH相同,事务id大的胜出。
  • 事务id相同,服务器id大的胜出。


http://www.kler.cn/a/369725.html

相关文章:

  • Ubuntu-手动安装 SBT
  • 98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
  • java求职学习day18
  • XCTF - IllIntentions wp
  • 二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2
  • Vue.js组件开发-实现下载时暂停恢复下载
  • 《使用Gin框架构建分布式应用》阅读笔记:p212-p233
  • 解锁AI潜力:揭秘高效人工智能数据准备的奥秘
  • 使用Claude新功能分析数据文件
  • 如何对网络设备进行监控:以监控易平台为例
  • 1FreeRTOS学习(队列、二值信号量、计数型信号量之间的相同点和不同点)
  • 前端实现卡片,展开/收起效果(vue/React/html)
  • 从零开始基于ROS-Noetic使用gazebo操控真实机械臂(附完整运行代码)
  • 论文笔记:TELLER 可解释的、可概括的、可控的假新闻检测的可信框架
  • <项目代码>YOLOv8 煤矸石识别<目标检测>
  • 在 macOS 上添加 hosts 文件解析的步骤
  • docker 安装部署 nginx
  • SPA和SSR
  • 构造+置换环,CF 1983D - Swap Dilemma
  • 计算机网络:网络层 —— IP数据报的发送和转发过程
  • php伪协议和move_uploaded_file、rename、copy等文件操作
  • 【python】OpenCV—WaterShed Algorithm(1)
  • 控制卸载/安装应用
  • Chromium HTML5 新的 Input 类型date 对应c++
  • C++基于opencv的视频质量检测--画面冻结检测
  • Vue3中ref、toRef和toRefs之间有什么区别?