首页 > 其他分享 >Zookeeper的选举机制

Zookeeper的选举机制

时间:2024-04-13 21:46:07浏览次数:26  
标签:ZXID 选举 Zookeeper Server2 Server 投票 服务器 机制 Leader

为什么要进行Leader选举?
Leader 主要作用是保证分布式数据一致性,即每个节点的存储的数据同步。遇到以下两种情况需要进行Leader选举

  • 服务器初始化启动
  • 服务器运行期间无法和Leader保持连接,Leader节点崩溃,逻辑时钟崩溃。

服务器初始化时Leader选举

Zookeeper由于其自身的性质,一般建议选取奇数个节点进行搭建分布式服务器集群。以3个节点组成的服务器集群为例,说明服务器初始化时的选举过程。启动第一台安装Zookeeper的节点时,无法单独进行选举,启动第二台时,两节点之间进行通信,开始选举Leader。

  1. 每个Server投出一票。他们两都选自己为Leader,投票的内容为(SID,ZXID)。
    SID即Server的id,安装zookeeper时配置文件中所配置的myid;ZXID,事务id,
    为节点的更新程度,ZXID越大,代表Server对Znode的操作越新。由于服务器初始化,
    每个Sever上的Znode为0,所以Server1投的票为(1,0),Server2为(2,0)。
    两Server将各自投票发给集群中其他机器。
  2. 每个Server接收来自其他Server的投票。集群中的每个Server先判断投票有效性,
    如检查是不是本轮的投票,是不是来Looking状态的服务器投的票。
  3. 对投票结果进行处理。先了解下处理规则
  • 首先对比ZXID。ZXID大的服务器优先作为Leader

  • 若ZXID相同,比如初始化的时候,每个Server的ZXID都为0,

  • 就会比较myid,myid大的选出来做Leader。

    对于Server而言,他接受到的投票为(2,0),因为自身的票为(1,0),所以此时它会选举Server2为Leader,
    将自己的更新为(2,0)。而Server2收到的投票为Server1的(1,0)由于比他自己小,
    Server2的投票不变。Server1和Server2再次将票投出,投出的票都为(2,0)。

  1. 统计投票。每次投票之后,服务器都会统计投票信息,如果判定某个Server有过半的票数投它,
    那么该Server将会作为Leader。对于Server1和Server2而言,统计出已经有两台机器接收了(2,0)的投票信息,
    此时认为选出了Leader。
  2. 改变服务器状态。当确定了Leader之后,每个Server更新自己的状态,
    Leader将状态更新为Leading,Follower将状态更新为Following。

服务器运行期间的Leader选举

Zookeeper运行期间,如果有新的Server加入,或者非Leader的Server宕机,那么Leader将会同步数据到新Server或者寻找其他备用Server替代宕机的Server。若Leader宕机,此时集群暂停对外服务,开始在内部选举新的Leader。假设当前集群中有Server1、Server2、Server3三台服务器,Server2为当前集群的Leader,由于意外情况,Server2宕机了,便开始进入选举状态。过程如下

  1. 变更状态。其他的非Observer服务器将自己的状态改变为Looking,开始进入Leader选举。
  2. 每个Server发出一个投票(myid,ZXID),由于此集群已经运行过,所以每个Server上的ZXID可能不同。
    假设Server1的ZXID为145,Server3的为122,第一轮投票中,Server1和Server3都投自己,
    票分别为(1,145)、(3,122),将自己的票发送给集群中所有机器。
  3. 每个Server接收接收来自其他Server的投票,接下来的步骤与初始化时相同。

标签:ZXID,选举,Zookeeper,Server2,Server,投票,服务器,机制,Leader
From: https://www.cnblogs.com/xu-xiaofeng/p/18133415

相关文章

  • 4. 会话机制 Cookie和Session
    4.1会话机制一次会话指的是:就好比打电话,A给B打电话,接通之后,会话开始,直到挂断电话,该次会话就结束了,而浏览器访问服务器,就跟打电话一样,浏览器A给服务器发送请求,访问web程序,该次会话就已经接通,其中不管浏览器发送多少请求(就相当于接通电话后说话一样),都视为一次会话,直到浏览器关闭......
  • Rust 的声明宏机制
    背景Rust宏编程是这门语言比较有趣但又难以掌握的知识点,而且在大多数项目中使用频度并不算高。本文尝试性地总结Rust声明宏的原理和使用,目的是为了能更好地看懂一些项目中macro_rules!的逻辑。所谓宏编程,我理解本质上就是元编程(据说最早源自LISP的「CodeisData,Datai......
  • 挂载命名空间机制
    原文:https://blog.mufanc.xyz/posts/4104300991/何为「挂载」?  手册中对于挂载的描述是这样的:AllfilesaccessibleinaUnixsystemarearrangedinonebigtree,thefilehierarchy,rootedat/.Thesefilescanbespreadoutoverseveraldevices.Themountcom......
  • 读论文-基于注意力机制的浅层图像隐写分析模型
    前言今天要读的论文是一篇名为《基于注意力机制的浅层图像隐写分析模型》,文章提出了一种基于注意力机制的浅层图像隐写分析模型,通过使用一个浅层神经网络控制模型参数量和训练时间,引入注意力模块,加速模型收敛,提升模型检测的准确率。要引用本文:请使用如下格式:段明月,李爽,钟小......
  • 读论文-基于自注意力机制和迁移学习的跨领域推荐算法
    前言今日要读的文章为一篇2022年4月2日发表于《计算机科学》的期刊文章;文章发现了传统的单领域推荐算法的问题:传统的单领域推荐算法受限于用户和项目的稀疏关系,存在用户/项目冷启动的问题,并且,其仅以用户对项目评分进行建模,忽略了评论文本中所蕴含的信息。基于此,文章提出了一种基......
  • 基于注意力机制与改进TF-IDF的推荐算法
    前言本篇文章是2020年8月发表于《计算机工程》的一篇期刊论文,文章名称《基于注意力机制与改进TF-IDF的推荐算法》。文章针对传统推荐系统主要依赖用户对物品的评分数据而无法学习到用户和项目的深层次特征的问题,提出基于注意力机制与改进TF-IDF的推荐算法(AMITI)。将双层注意力......
  • 基于自注意力机制的轻量级人体姿态估计(Lightweight Human Pose Estimation Based on
    写在前面本文是一篇于2023年3月21日发表在2023InternationalConferenceonBigData,EnvironmentalIndustryandMaterialsScience(ICBDEIMS2023)的一篇会议论文。论文主要聚焦于解决单签人体姿态估计网络模型中普遍存在的参数多、计算复杂度高、检测时间长的问题,文章采用......
  • Robocopy是Windows操作系统中的一个命令行实用工具,用于在文件和目录之间进行复制。它
    robocopy/?-------------------------------------------------------------------------------  ROBOCOPY  ::  Windows的可靠文件复制------------------------------------------------------------------------------- 开始时间:2024年4月11日16:33:......
  • Rust 的包管理机制
    背景Rust作为一门强大的系统编程语言,拥有一个现代且成熟的包管理机制。C/C++发展多年,迄今也没有特别靠谱好用且生态健全的包管理系统(据说Conan还不错),以至于很多时候都以源代码的形式(比如常见的deps/目录或者gitsubmodules等)来管理依赖。就这点上,Rust通过语言层面的设计......
  • Rust 的条件编译机制
    基本原理Rust提供了一个[cfg]的编译选项,允许你基于一个传递给编译器的标记编译代码,有两种形式:#[cfg(foo)]如果foo设置了编译对应代码;#[cfg(bar="baz")]如果bar="baz",则编译对应代码;比如:fnmain(){#[cfg(feature="foo")]println!("fooenable......