ZooKeeper 技术内幕|Leader 选举是一个什么样的过程

news2024/11/24 16:19:45

几个问题,引发思考:

  1. 什么时候 leader 选举?

  2. 选举的过程?

  3. 选举过程中,是否能提供服务?

  4. 选举结果,是否会丢失数据?

服务器角色

2 个小问题:

  1. 服务器节点有多少角色?

  2. 每个角色的作用?

角色

ZK 集群中,服务器节点,有 3 中角色:

  1. Leader:ZK 集群工作机制的核心,主要工作:

    • 调度者:集群内部各个服务节点的调度者

    • 事务请求:事务请求的唯一调度和处理者,保证集群事务处理的顺序性

  2. Follower:主要职责:

    • 非事务请求:Follower 直接处理非事务请求,对于事务请求,转发给 Leader

    • Proposal 投票:Leader 上执行事务时,需要 Follower 投票,Leader 才真正执行

    • Leader 选举投票

  3. Observer:ZK 3.3.0+ 版本开始引入,提升 ZK 集群的非事务处理能力,主要职责:

    • 非事务请求:Follower 直接处理非事务请求,对于事务请求,转发给 Leader

特别说明:Observer 跟 Follower 的唯一区别:

  1. Follower 参与投票:Leader 选举、Proposal 提议投票(事务执行确认)

  2. Observer 不参与投票:只用于提供非事务请求的处理

疑问:节点成为 Follower 还是 Observer 是 配置文件中设定的?

Leader 选举

2 个小问题:

  1. 什么时候,进行 Leader 选举?

  2. Leader 选举的具体过程,是什么?

时机

下面任何一种情况,都会触发 Leader 选举:

  1. 启动时,集群服务器刚启动

  2. 运行时,Leader 崩溃

服务器的状态流转:

过程

Leader 选举过程,本质就是广播优先级消息的过程,选出数据最新的服务节点,选出优先级最高的服务节点,基本步骤:

  1. 各个服务器节点,广播自己的优先级标识 (sid,zxid)

  2. 服务器节点收到其他广播消息后,跟自己的优先级对比,自己优先级低,则变更当前节点投票的优先级(sid,zxid) ,并广播变更后的结果

  3. 当任意一个服务器节点收到的投票数,超过了法定数量(quorum),则,升级为 Leader,并广播结果。

疑问:法定数量(quorum),一般设置为集群规模大小的半数以上,quorum 在哪配置的?

特别说明:

  1. 服务器节点的优先级标识:(sid,zxid)

  2. 优先比较 zxid (事务 ID),其次比较sid(服务器ID)

  3. sid (服务器 ID) 是节点配置文件中设定的

  4. 当前服务器上的 zxid 是什么时候设定的?是在 Leader 执行事务过程中,向当前服务器同步的?如何活的当前服务器上的 zxid

具体选举过程:

补充说明:

  1. 由于网络延时,节点得不到足够多广播信息时,会做出错误的投票判断,纠正过程更耗时

  2. 选举过程中,服务器节点会等待一定时间,再广播投票信息,时间间隔一般设定为 200 ms

  3. 上面 Leader 选举,采取事件触发 Push 方式 广播消息,称为 快速 Leader 选举,因为之前的 Leader 选举,采用 Pull 方式,每隔 1s 拉取一次。

疑问:

服务器节点,等待 200ms 的起始时间点是什么?是收到一轮新投票消息,开始计时?

RE:

  1. 正常情况下,投票信息事件触发,广播出去的;

  2. 当某个服务器节点,判断支持当前节点的投票数量 >= 法定数量(quorum),则,仍然等待 200ms,确认是否有更优的投票。

真正的投票信息:

属性说明
id被推举 Leader 的 sid
zxid被推举 Leader 的事务ID
electionEpoch投票的轮数,约束:同一轮投票,计数有效
peerEpoch被推举 Leader 的 epoch
state当前服务器的状态

一次 Leader 选举过程,属于同一个 electionEpoch,结束时,会选出新的 Leader;服务器节点,在比较 (sid,zxid) 之前,会先比较选举轮次 electionEpoch,只有同一轮次的 Leader 投票信息才是有效的:

  1. 外部投票轮次 > 内部投票轮次,更新内部投票,并且触发当前节点投票信息的重新广播

  2. 外部投票轮次 < 内部投票轮次,直接忽略当前的外部投票

  3. 外部投票轮次 = 内部投票轮次,进一步比较 (sid,zxid)

疑问:Leader 负责执行所有的事务操作,一次事务操作,

  1. Leader 如何将事务操作同步到 Follower 和 Observer ?同步、异步?

  2. 如何保证同步过程中,事务一定执行成功?事务失败的影响?

Leader 上执行的事务状态,通过 Zab 状态更新的广播协议,更新到 Follower 和 Observer。

附录

分布式系统 Leader 选举:脑裂

脑裂(split brain):服务器集群的 2 个子集,能够同时独立选举 Leader,并正常运行,形成 2 个集群。

解决办法:Leader 选举的法定数量(quorum),超过正常集群的半数。

Leader 选举的必要条件:节点数量 > 法定数量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169572.html

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

相关文章

如何实现连杆码垛机械臂的逆解计算?

1. 连杆码垛机械臂介绍 连杆码垛机器人是工业应用场景中常用的一种机械臂&#xff0c;常用于简单的大负载搬运作业场景。常见的连杆码垛机械臂都是4个自由度&#xff0c;相较于6轴和7轴的机械臂成本较低。 连杆码垛机械臂的运动特性是&#xff1a;末端始终平行于地面。第一个平…

【算法】一篇文章弄清楚KMP算法的实现

目录 前言&#xff1a; 一.KMP算法简介&#xff1a; 二.next数组的介绍及实现 三.next数组的优化 四.伪代码和完整代码的实现 总结&#xff1a; 博客主页&#xff1a;张栩睿的博客主页 欢迎关注&#xff1a;点赞收藏留言 系列专栏&#xff1a;c语言学习 家人们写博客真…

小白的性能测试探索之路(1)

​​​​​​​ 某一天&#xff0c;领导突然就拉了个会说&#xff0c;我们成立稳定性专项&#xff0c;以测试为主力提升服务的整体稳定性&#xff1f; 当时我的内心是&#xff1a;“what”&#xff0c;性能测试我完全没接触过呀&#xff0c;i am a little tester&#xff5e;而…

华为MPLS-HubSub组网实验配置

目录 配置接口IP地址以及底层IGP协议 配置MPLS LDP协议 Sub与Hub建立Vpnv4邻居 配置PE与CE对接命令 Sub-PE与CE对接配置 Hub与CE对接配置 发现问题 PE与CE之间都采用EBGP方式进行路由传递 MPLS隧道——Hub&Spoke组网_静下心来敲木鱼的博客-CSDN博客_hub spokehttps…

Flume第二章:企业案例

系列文章目录 Flume第一章&#xff1a;环境安装 Flume第二章&#xff1a;企业案例 文章目录系列文章目录前言一、复制和多路复用1.案例需求2.案例实现3.结果查看二、负载均衡和故障转移1.需求案例2.案例实现3.结果查看三、聚合1.案例需求2.案例实现3.查看结果总结前言 这次我…

用python写的代码输入助手小程序(附源码)

命令太多&#xff0c;很容易忘记&#xff0c;还有很多代码片段想保存下来用到的时候能够快速输入&#xff0c;提高开发效率。在网上找了很多&#xff0c;发现都不是自己想要的。于是就用python写了一个自己用的代码输入助手小程序&#xff0c;我自己已经用了很长时间了&#xf…

工业中常用流量计及其测量原理

一、流量计单位 工程上常用单位m3/h&#xff0c;它可分为瞬时流量&#xff08;Flow Rate&#xff09;和累计流量&#xff08;Total Flow&#xff09;&#xff0c;瞬时流量即单位时间内过封闭管道或明渠有效截面的量&#xff0c;流过的物质可以是气体、液体、固体&#xff1b;累…

Introduction to Multi-Armed Bandits——02 Stochastic Bandits

Introduction to Multi-Armed Bandits——02 Stochastic Bandits 参考资料 Slivkins A. Introduction to multi-armed bandits[J]. Foundations and Trends in Machine Learning, 2019, 12(1-2): 1-286. 在线学习(MAB)与强化学习(RL)[2]&#xff1a;IID Bandit的一些算法 B…

化繁为简、性能提升 -- 在WPF程序中,使用Freetype库心得

本人使用WPF开发了一款OFD阅读器&#xff0c;显示字体是阅读器中最重要的功能。处理字体显示有多种方案&#xff0c;几易其稿&#xff0c;最终选用Freetype方案。本文对WPF中如何使用Freetype做简单描述。 OFD中有两种字体&#xff1a;嵌入字体和非嵌入字体。1&#xff09; 非…

【vue2】vue生命周期的理解

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;vue生命周期的介绍、vue生命周期钩子函数详解&#xff0c;vue生命周期的执行顺序 目录 …

使用管控平台管理redis集群

1 添加redis集群 在数据库资源中添加redis集群&#xff0c;配置参数并将URL中cluster调整为true。 2 验证配置资源是否正常 3 操作redis数据库中的数据 可以通过使用图形化界面或者命令窗口进行Redis数据库的CRUD 3.1 图形化界面操作 操作Redis字符串列表 3.1.1 新增 右…

Apache Iceberg 背后的设计

原文地址: 阿帕奇冰山&#xff1a;幕后的建筑外观 |德雷米奥 (dremio.com)绝对的精品文章!!!机器翻译和自我调整组成了这篇文章&#xff0c;供大家学习。介绍数据湖的构建希望是实现数据民主化&#xff0c;以允许越来越多的人员、工具和应用程序使用越来越多的数据。实现这一目…

十五天学会Autodesk Inventor,看完这一系列就够了(八),图框自定义

所周知&#xff0c;Autocad是一款用于二维绘图、详细绘制、设计文档和基本三维设计&#xff0c;现已经成为国际上广为流行的绘图工具。Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体模拟软件。因为很多人都熟悉Autocad&#xff0c;所以再学习Inventor&#x…

【数据库数据恢复】华为云mysql数据库数据被delete的数据恢复案例

数据库数据恢复环境&#xff1a; 华为云ECS&#xff0c;linux操作系统&#xff1b; mysql数据库&#xff0c;实例内数据表默认存储引擎为innodb。 数据库故障&#xff1a; 在执行数据库版本更新测试时&#xff0c;用户误将本应在测试库测试的sql脚本执行在生产库中&#xff0c…

拉伯证券|芯片半导体迎来“行业底部出清”,大资金进场迹象明显

近期关于小芯片的利好不断&#xff0c;英特尔近期就发布了根据小芯片技能的处理器&#xff0c;而近期长电科技也在小芯片范畴获得突破。据长电科技在互动平台表明&#xff0c;公司现已完成4nm工艺制程手机芯片的封装&#xff0c;最大封装体面积约为1500平方毫米的体系级封装。长…

人工智能所需高等数学知识大全(收藏版)

来源&#xff1a;投稿 作者&#xff1a;愤怒的可乐 编辑&#xff1a;学姐 不懂数学是学不好人工智能的&#xff0c;本系列文章就汇总了人工智能所需的数学知识。本文是高等数学篇。 另有线代篇和概率论篇 函数与极限 函数 yf(x) ,x是函数f的自变量&#xff0c;y是因变量 函…

数据结构(4)线段树、延迟标记、扫描线

活动 - AcWing 参考-《算法竞赛进阶指南》 一、延迟标记&#xff08;懒标记&#xff09; 在线段树的区间查询命令中&#xff0c;每当遇到被查询区间[l,r]完全覆盖节点时&#xff0c;可以直接把节点上的答案作为备选答案返回。我们已经证明&#xff0c;这样操作的复杂度为O(4…

01-React(脚手架+MVC/MVVM+JSX)

使用 create-react-app 构建React工程化项目 安装 create-react-app $ npm i create-react-app -g 「mac需要加sudo」 基于脚手架创建项目「项目名称需要符合npm包规范」 $ create-react-app xxx 目录结构&#xff1a; |- node_modules 包含安装的模块 |- public 页面模板…

79.循环神经网络的从零开始实现

从头开始基于循环神经网络实现字符级语言模型。 这样的模型将在H.G.Wells的时光机器数据集上训练。 和之前一样&#xff0c; 我们先读取数据集。 %matplotlib inline import math import torch from torch import nn from torch.nn import functional as F from d2l import to…

Rockchip开发系列 - 9.watchdog看门狗

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 dts中的watchdog节点watchdog驱动文件TRM watchdog:WDT框图功能描述计数器中断系统复位复位脉冲长度操作流程图寄存器描述寄存器设置…