Zookeeper 的选举机制也不过如此!

理解zookeeper的选举机制 简介 zookeeper是一个分布式协调服务(为其他分布式程序服务) 它自身就是一个分布式服务 提供的服务:主从协调、服务器节点动态上下线感知、统一配置管理、分布式共享锁、统一名称服务…… 核心功能: 管理用户程序提交的数据 为用户程序提供数据节点监听服务 角色:leader;follower(observer) Leader作为整个ZooKeeper集群的主节点,负责响应所有对ZooKe... 阅读详情

Zookeeper 是一个分布式服务框架,主要是用来解决分布式应用中遇到的一些数据管理问题如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

我们可以简单把 Zookeeper 理解为分布式家庭的大管家,那么管家团队是如何选出Leader的呢?好奇吗,接下来带领大家一探究竟。

人类选举的基本原理

讲解 Zookeeper 选举过程前先来介绍一下人类的选举。
我们每个人或多或少都经历过几次选举,在投票的过程中可能会遇到这样几种情况:

情况1:自己和候选人熟,将票投给你认为能力强的那个人;

情况2:自己也是候选人,会想着拉票,但是发现别人能力比你强,就将自己的票投给别的候选人。

所有人投票完后,统计投票箱中票数最多的候选人,当选领导。

在整个投票过程中我们可以提炼出四个最核心的概念:

候选人能力: 投票的基本原则是选最强的人。

遇强改投: 如果后面发现更强的人可以改投票。

投票箱: 所有人的票都会放在投票箱。

领导者: 得票最多的人即为领导者。

从人类选举的原理我们来简单推导一下Zookeeper的选举原理。

Zookeeper选举的基本原理

如果zookeeper是单机部署,不是集群模式,那么不存在选举的问题。

zookeeper 的选举和人类选举基本一样,借用上面说的4个核心概念,来说说选举的基本原理。

  • 候选人能力

zookeeper 通过 sid 和zxid (事物ID) 来证明自己的能力强弱。

zxid 的全称是 ZooKeeper Transaction Id,即 Zookeeper 事务id。 数据的最新版本号 , 数据越大说明能力越强。

sid , 我们自定义的服务器编号ID,值越大证明能力越大。

  • 遇强改投

在选举的时候,每台zookeeper 节点都会认为自己是最强的,会先投票给自己(选票上包含sid、zxid)。

然后将选票传递给集群中的每个节点,同时自己也会接收其他节点发过的选票。节点接收到选票后,会判断选票上节点的能力强弱,如果发现比自己强,那么就进行改票,把自己的选票投给能力强的。然后在传递给集群中的每个节点。

  • 投票箱

与人类选举不同,zookeeper 集群中,每个节点都会维护一份投票箱。 因为每个节点的选票都会同步给每个集群中的节点,所以投票箱的结果都是一致的。

  • 领导者

投票的过程中,只要发现票数有超过一半的节点,领导就选择成功,投票也就宣告结束。

什么场景下 Zookeeper 需要选举?

当zookeeper 集群中有一台机器发生以下场景,就会进行选举。

  • 机器启动
  • 机器运行期间leader宕机
机器启动选举

假设5台zookeeper依次启动,sid的编号依次为1-5。

  1. 服务器1

先投自己1票,投票箱票数不过半,选举无法完成。此时服务器-1的状态为looking

  1. 服务器2

先投自己1票,将自己的选票结果同步给服务器1。 服务器1 发现服务器2的sid编号比自己大,于是进行改票,把自己的选票投给了服务器2,并同步给服务器2。

此时双方的投票箱结果为:

服务器1,获0票;

服务器2,获2票;

并没有超过票数过半的机器。选举依然无法完成,此时服务器2的状态仍为looking

  1. 服务器3

先投自己1票,将自己的选票结果同步给服务器1、服务器2。 服务器1和服务器2 ,发现服务器3的sid编号比自己还大,所以赶紧进行改票,都投给了服务器3。

此时投票箱的结果为:

服务器1,获0票;
服务器2,获2票;
服务器3,获3票;

发现有票数过半的机器,于是服务器3,当仁不让成了leader。此时更改服务器1、2的状态为 following,服务器3为leading

  1. 服务器4

先投自己1票,同步自己选票时,发现服务器1、2、3 已经不是looking状态了,于是取得投票箱结果,将自己的选票改投给服务器3,自己的状态更改为following

  1. 服务5

同服务器4 一致。

最终的结果是:服务器3是leader,其他全是follow。

机器运行期间leader宕机选举

zookeeper运行期间,当leader 宕机,整体会对外暂停服务提供,触发新的一轮选举。触发新选举的时候,每台txid可能都不一样的。还是以刚才上面的案例进行分析,假设服务器3 leader 宕机,txid为分别为, 服务器1(99),服务器2(102),服务器4(100),服务器5(101)。

投票的过程和初始化的基本类似,主要为以下几个步骤:

1)状态变更,除Obsever状态的其他服务器全部变更为looking,然后进行leader的选举过程

2)每个服务器先投自己一票,然后同步选票

3)每个服务器都会收到各个服务器的投票,如果发现有txid比自己大的,会进行改票

4)处理和统计投票,每一轮投票结束后都会统计投票,超过半数即可当选。

5)改变服务器的状态,宣布当选

直接看图:

很显然,最后服务器2 被当选为新的leader。

选举机制中涉及到的核心概念

  • sid(服务器ID、serverId)

服务器编号,编号越大,在选举leader时权重越大。

  • zxid (事物ID)

数据的版本号,数值越大数据越新,在选举leader算法中,越大权重越大咯

  • Epoch(逻辑时钟)

也叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的,每投完一次票这个数据就会增加。

  • Server状态(选举状态)

looking: 竞选状态。

following: 随从状态,同步leader状态,参与投票。

observing: 观察状态,同步leader状态,不参与投票。

leading: 领导者状态。

总结

(1)Zookeeper 选举会发生在服务器初始状态和运行状态下。

(2)初始状态下会根据服务器sid的编号对比,编号越大权值越大,投票过半数即可选出Leader。

(3)Leader 故障会触发新一轮选举,zxid 代表数据越新,权值也就越大。

(4)在运行期选举还可能会遇到脑裂的情况,大家可以自行学习。

来源:https://4m.cn/zmR0u

zookeeper选举机制 zookeeper选举机制 zookeeper 默认的算法是 FastLeaderElection,采用投票数大于半数则胜出的逻辑。 相关内容: Zab协议 、数据可以两阶段提交协议 1. 与选举相关的概念 服务器 ID ​ 比如有三台服务器,编号分别是 1,2,3。 ​ 编号越大在选择算法中的权重越大。 选举状态 ​ LOOKING,竞选状态。 ​ FOLLOWING,随从状态,同步 leade... 阅读详情

相关推荐

zooKeeper篇-zk的选举机制

zk搞起

liaofeifeifeifei的博客 2660

Zookeeper选举机制介绍

脑裂(Split-brain)是分布式系统中常见的问题之一,指的是系统中的节点被划分成多个互相隔离的部分,每个部分都认为自己是唯一正确的状态,而与其他部分的状态不一致,导致系统失去一致性,从而产生一系列问题。如果其他节点的epoch值比自己的小,则忽略该节点的投票信息,如果epoch值相等,则比较zxid的值,选取zxid值最大的节点作为leader。采用“选主”机制,即在分布式系统中选出一个主节点,其他节点都作为从节点,由主节点来负责协调各个从节点的操作,避免不同部分之间的操作冲突和数据不一致问题。

lonely_baby的博客 1505

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文提供《秦时明月》6.2魔改版从零开始的完整部署指南。详细讲解CentOS服务器环境准备、服务端文件部署与安装、关键端口开放及进程验证。重点涵盖安卓客户端APK的IP修改与重签名方法,并介绍了GM后台工具的访问与使用,助你快速搭建并管理专属游戏服务器。

garlic的博客 311

Zookeeper选举机制详解

Zookeeper选举机制详解,包括第一次启动选举、leader宕机选举。

weixin_45906061的博客 1732

保姆级教程 | MS构建三层石墨后转成LAMMPS的data文件

喜欢的话记得一键三连~

baguette的博客 2952

一个开源的AI数据分析工具,与数据对话,一键生成SQL、图表、表格、报告和智能商业分析。

Wren AI是一个开源的AI智能代理,让用户能够跟数据对话,实现从文本到SQL的转换,还能生成图表、电子表格、报告以及商业智能分析。它支持多种语言,能深入挖掘数据价值,提供智能数据探索功能,通过语义索引和精心设计的界面,让用户无需写代码即可获取洞察。Wren AI采用独特的架构,包含Wren UI、Wren AI Service和Wren Engine三大核心服务,可部署在本地或云端,助力团队高效、安全地解锁数据潜力。

AI_Charlotte的博客 4496

解Bug之路-ZooKeeper集群拒绝服务

解Bug之路-ZooKeeper集群拒绝服务 前言 ZooKeeper作为dubbo的注册中心,可谓是重中之重,线上ZK的任何风吹草动都会牵动心弦。最近笔者就碰到线上ZK Leader宕机后,选主无法成功导致ZK集群拒绝服务的现象,于是把这个case写出来分享给大家(基于ZooKeeper 3.4.5)。 Bug现场 一天早上,突然接到电话,说是ZooKeeper物理机宕机了,而剩余几台机器状态都是 sh zkServer.sh status it is probably not running

jahughag的博客 3723

App inventor2通过蓝牙控制Arduino Uno LED开关

App inventer2控制Arduino Uno LED开关 如果学会这个小程序,大部分的手机通过蓝牙控制Arduino的功能都可以实现,这个小示例是通过蓝牙模块向Arduino发送"0"和"1",而其它功能要发送其它不同的字符串内容给Arduino. 所需硬件: Arduino Uno JDY-16 蓝牙模块(我的是蓝牙4.2版本) 草帽LED(可选) 手机(我用的是安卓,苹果手机应该也可以,最近其应用商店也有App inventor(AI)伴侣) 软件: Aduino IDE或者Platfom

Firmin123456的博客 5499

Zookeeper的选举机制和同步机制超详细讲解

前言 zookeeper相信大家都不陌生,很多分布式中间件都利用zk来提供分布式一致性协调的特性。dubbo官方推荐使用zk作为注册中心,zk也是hadoop和Hbase的重要组件。其他知名的开源中间件中也都出现了zk的身影。 有很多童鞋认识zk很久了,知道其基本理念,知道如何使用。但当面试时问到集群zk之间的选举和数据同步机制时,就陷入了盲区。 其实很多的分布式中间件的选举和同步,都和zk有异曲同工之妙。这篇文章我就来重点聊下关于zk集群之间的选举和同步机制。 ZK集群的部署 首先我们来看下半数

各种自助共享门店系统定制开发,美团核销服务商 1601

基于MATLAB的奇异谱分析(SSA)算法详解

本文详细介绍了基于MATLAB的奇异谱分析(SSA)算法。文章首先阐述了SSA的基本概念、历史发展及其与传统信号分析方法的对比优势,指出SSA作为一种非参数、非线性时间序列分析方法,特别适合处理非平稳信号。随后详细解析了SSA算法的核心原理与数学模型,包括轨迹矩阵构建、奇异值分解、分组与重构四个关键步骤。文章还提供了完整的MATLAB实现框架和代码解析,涵盖参数检查、轨迹矩阵构建、SVD分解、分组策略和重构过程。最后,通过信号分解、去噪和预测三个应用案例展示了SSA的实际效果。

qq_42212808的博客 168

寄存器与计数器设计(Verilog)

always @(posedge Reset or posedge Clock)//请在括号中补充敏感信号列表。always @(negedge Resetn , posedge Clock)//请在括号中补充敏感信号列表。always @(negedge Resetn,posedge Clock)//请在括号中补充敏感信号列表。//为了便于自动评测,请勿更改n的值。//为了便于自动评测,请勿更改n的值。//为了便于自动评测,请勿更改n的值。//为了便于自动评测,请勿更改n的值。

M_inherit的博客 362

zookeeper的选举机制(五台节点)

☆:节点一到节点五的myid分别是1,2,3,4,5 zookeeper对leader的选举往往分为两个方面,细分的话可以分为三个方面 第一个是zookeeper集群第一次启动,另一种是非第一次启动,而非第一次启动又分为leader存活状态和非存活状态。 一、第一次启动选举 zookeeper特点是,只要节点有半数以上存活就能正常工作,因此其选举机制达到半数就能选出leader。 选取机制: 1.当第一台节点启动之后,该节点首先投自己一个选票,然后把总票数与节点数(5)的一半(2.5)作对比,此

weixin_45937224的博客 1524

Vue3 + 高德地图实现车辆电子围栏监控与报警

通过本文的实现,我们完成了一个通用的车辆电子围栏监控功能:支持多种围栏类型。支持进入/离开/双向报警。使用缓存机制避免重复告警。可与Vue3 + 高德地图无缝集成。在实际项目中,可以结合WebSocket 实时定位,实现车辆的实时监控 + 围栏告警系统🚀。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 1035

【略有料】Zookeeper 的选举机制也不过如此!

(1)Zookeeper 选举会发生在服务器初始状态和运行状态下。(2)初始状态下会根据服务器sid的编号对比,编号越大权值越大,投票过半数即可选出Leader。(3)Leader 故障会触发新一轮选举,zxid 代表数据越新,权值也就越大。(4)在运行期选举还可能会遇到脑裂的情况,大家可以自行学习。Zookeeper 的选举机制也不过如此!- 腾讯云开发者社区-腾讯云。

daobuxinzi的博客 203

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Zookeeper选举机制

Zookeeper选举机制一、选举机制介绍二、全新(第一次启动)的集群选举机制三、非全新()的集群启动 一、选举机制介绍 zookeeper是按照Paxos算法进行选举的,这个算法也称之为半数选举机制。 所有节点都有投票权,当一个几点票数过半,这个节点就是leader。 zookeeper机制规定,当有新的节点加入时,没有选举出leader时之前票数作废,重新投票。 leader产生后,其他节点投票给leader。 1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。

流离岁月的博客 5418

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Zookeeper的选举机制

Zookeeper的leader选举机制是基于ZAB(Zookeeper Atomic Broadcast)协议的,这是一种基于Paxos协议的变种,专门用于Zookeeper的分布式协调服务。

全局可见 2103

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

一篇文章搞懂 ZooKeeper 的选举机制

前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 正文 选举机制的简介 ZooKeeper 为了保证各节点的协同工作,在工作时需要一个 Leader 角色,而 ZooKeeper 默认采用 FastLeaderElection 算法,且投票数大于半数则胜出的机制。 在介绍选举机制前,首先了解选举涉及的相关概念。 服务器 ID 这是在配置集群时设置的 myid

Shockang的博客 1万+

我不信我这样说,你还看不懂 Zookeeper 的选举机制!

Zookeeper 是一个分布式服务框架,主要是用来解决分布式应用中遇到的一些数据管理问题如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 我们可以简单把 Zookeeper 理解为分布式家庭的大管家,那么管家团队是如何选出Leader的呢?好奇吗,接下来带领大家一探究竟。 同时也整理了一些个人觉得比较好的学习书籍、视频资料以及大厂面经视频共享在群文件里面,有需要的小伙伴可以自行添加哦! 包含的模块分为19个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web.

程序员Monkey的专栏 5094

一文彻底搞懂ZooKeeper选举机制

ZooKeeper 是一个分布式的开源协调服务,它提供了一个高性能的分布式协调服务,用于构建分布式应用程序和服务。ZooKeeper 集群是由多个 ZooKeeper 服务器组成的,这些服务器协同工作以提供高可用性和可靠性。

永远在路上 5542

简单理解Zookeeper之选举机制

负责处理客户端发送的读、写事务请求。这里的事务请求可以理解这个请求具有事务的 ACID 特性。同步写事务请求给其他节点,且需要保证事务的顺序性。负责处理客户端发送的读请求转发写事务请求给 Leader。参与 Leader 的选举。和 Follower 一样,唯一不同的是,不参与 Leader 的选举,且状态为 OBSERING。如果需要将哪一个节点设置为observer,那么只需要修改这个节点对应的zoo.cfg即可。

m0_63130425的博客 1725

简述Zookeeper的选举机制(入门向)

Zookeeper作为一个开源的分布式的,为分布式应用提供协调服务的Apache项目。 它有一个很重要的特点:半数机制,集群中只要有半数以上节点存活,Zookeeper集群就能正常服务,所以Zookeeper适合安装奇数台服务器(最少3台)。 Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。 下面我就用一...

cvwarrior_wutu的博客 5225

理解zookeeper选举机制

一、zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。 这篇主要分析leader的选择机制,zookeeper提供了三种方式: LeaderElection AuthFastLeaderElection FastLeaderElection(最新默认) 默认的算法是FastLeaderElection,所以这篇主要分析它的选..

weixin_49539546的博客 6598

ZooKeeper 选举机制

ZooKeeper 集群中的选举是为了确保系统的可用性和一致性。在以下情况下,ZooKeeper 需要进行选举:Leader 故障: 当当前的 Leader 出现故障或不可用时,需要选举一个新的 Leader 来接管领导权,以确保系统的正常运行。这种情况下,其他 ZooKeeper 服务器会通过一种选举算法选出新的 Leader。新节点加入: 当新的 ZooKeeper 服务器加入集群时,需要选举一个 Leader 来维护集群的状态和数据一致性。

qq_62984376的博客 1255
上一篇: 处理 Exception 的几种实践,很优雅,被很多团队采纳!
下一篇: 这也太简单了!!Zookeeper核心ZAB协议
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值