【大数据学习 | 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.mzph.cn/bicheng/57776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32之EC800K 4G模块驱动

1.EC800K简介 EC800K,特别是EC800K-CN,是移远通信专为M2M(机器对机器)和IoT(物联网)领域而设计的超小尺寸LTE Cat 1无线通信模块。EC800K-CN作为一款专为M2M和IoT领域设计的LTE Cat 1无线通信模块&#xff…

w~视觉~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/12320868 #xx1 基于mxnet的训练代码迁移到pytorch上和 在yolov5的代码基础上验证了一些目标检测的想法一起发了 在迁移mxnet训练代码的时候,很长一段时间结果都无法对齐,于是我不得不又重新认真的读…

Flutter Column组件实战案例

In this section, we’ll explore the Column widget, a fundamental tool for arranging widgets vertically in Flutter. We’ll dive into its functionality and guide you through using it effectively to create well-organized and visually appealing layouts. 在本节…

UE5 第一人称示例代码阅读0 UEnhancedInputComponent

UEnhancedInputComponent使用流程 我的总结示例分析firstthenand thenfinally&代码关于键盘输入XYZ 我的总结 这个东西是一个对输入进行控制的系统,看了一下第一人称例子里,算是看明白了,但是感觉这东西使用起来有点绕,特此梳…

Ubuntu开启路由转发功能

IP转发允许系统在不同的网络接口之间路由数据包,这对于设置路由器等任务至关重要。下面是在Ubuntu上临时和永久启用IP转发的步骤。 1. 查看“当前IP转发状态” sysctl net.ipv4.ip_forward其中: ① net.ipv4.ip_forward 0 表示IP转发功能关闭 …

ctfshow(41)--RCE/命令执行漏洞--或绕过

Web41 源代码: if(isset($_POST[c])){$c $_POST[c]; if(!preg_match(/[0-9]|[a-z]|\^|\|\~|\$|\[|\]|\{|\}|\&|\-/i, $c)){eval("echo($c);");} }else{highlight_file(__FILE__); }代码审计: 过滤了数字和字母,但没有过滤或…

语言模型微调:提升语言Agent性能的新方向

人工智能咨询培训老师叶梓 转载标明出处 大多数语言Agent依赖于少量样本提示技术(few-shot prompting)和现成的语言模型。这些模型在作为Agent使用时,如生成动作或自我评估,通常表现不佳,且鲁棒性差。 论文《FIREACT…

随机抽取学号

idea 配置 抽学号 浏览器 提交一个100 以内的整数。,后端接受后,根据提供的整数,产生 100 以内的 随机数,返回给浏览器? 前端:提供 随机数范围 ,病发送请求后端:处理随机数的产生&…

学习记录:js算法(七十四):跳跃游戏II

文章目录 跳跃游戏II思路一:贪心算法思路二:动态规划思路三:广度优先搜索 (BFS)思路四:深度优先搜索 (DFS) 跳跃游戏II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的…

python表格处理prettytable vs pandas

prettytable和pandas简介 Python中prettyTable和pandas都是用于处理和展示数据的工具,但它们在设计目标、功能和使用场景上有显著的不同。 PrettyTable是一个轻量级的库,主要用于创建美观的ASCII表格,让表格数据在命令行或文本界面中看起来更…

【电机应用】变频器控制——变频水泵、变频空调

【电机应用】变频器控制——变频水泵、变频空调 文章目录 [TOC](文章目录) 前言一、变频器1、变频器的组成2、变频器的工作原理3、变频器常用算法 二、变频器的应用场景1、变频水泵2、变频空调 三、参考文献总结 前言 使用工具: 提示:以下是本篇文章正文…

QHeaderView添加复选框以及样式

实现这个效果,需要重写paintSection来实现效果,同时重写mousePressEvent来执行是否勾选复选框。 paintSection实现一些复选框样式 void CheckBoxHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const {if (m_…

Android 原生开发与Harmony原生开发浅析

Android系统 基于Linux ,架构如下 底层 (Linux )> Native ( C层) > FrameWork层 (SystemService) > 系统应用 (闹钟/日历等) 从Android发版1.0开始到现在15,经历了大大小小的变革 从Android6.0以下是个分水岭,6.0之前权限都是直接卸载Manifest中配置 6.0开始 则分普…

Matlab|基于氢储能的热电联供型微电网优化调度方法

目录 1 主要内容 模型求解流程 2 部分程序 3 程序结果 日前调度 日内调度 4 下载链接 1 主要内容 该程序复现《基于氢储能的热电联供型微电网优化调度方法》,针对质子交换膜燃料电池和电解槽的热电联供特性,为避免氢能系统的热能浪费并进一步提高…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目,所以这里就结合一下,在搭建 k8s 集群后安装运维常用服务,比如 ansible 和 prometheus,用 NFS 实现数据存储同步&#xff0c…

Windwos下Docker下载安装centos7.6

操作步骤: 1.打开docker软件进入到DockerHub页面搜索contos镜像 2.在终端通过命令获取镜像并创建容器运行 docker run -itd --name test_centos7.6 centos:7.6.1810 test_centos7.6表示容器的名称 centos:7.6.1810表示镜像的名称,如果镜像不存在会默认拉…

k8s 部署 emqx

安装cert-manager 使用Helm安装 helm repo add jetstack https://charts.jetstack.io helm repo update helm upgrade --install cert-manager jetstack/cert-manager \--namespace cert-manager \--create-namespace \--set installCRDstrue如果通过helm命令安装失败&#x…

网络层知识点总结4

目录 前言 一、什么是NAT?什么是NAPT?NAT的优点和缺点有哪些?NAPT有哪些特点? 二、建议IPv6协议没有首部检验和。这样做的优缺点是什么? 三、当使用IPv6时,协议ARP是否需要改变?如果需要改变…

线性可分支持向量机代码 举例说明 具体的变量数值变化

### 实现线性可分支持向量机 ### 硬间隔最大化策略 class Hard_Margin_SVM:### 线性可分支持向量机拟合方法def fit(self, X, y):# 训练样本数和特征数m, n X.shape# 初始化二次规划相关变量:P/q/G/hself.P matrix(np.identity(n 1, dtypenp.float))self.q matr…

ArcGIS计算多个面要素范围内栅格数据各数值的面积

本文介绍在ArcMap软件中,基于面积制表工具(也就是Tabulate Area工具),基于1个面要素数据集与1个栅格数据,计算每一个面要素中各栅格数据分布面积的方法。 首先,来看一下本文的需求。现有一个矢量面的要素集…