一文彻底搞懂ZooKeeper选举机制

文章目录

  • 1. ZooKeeper 集群
  • 2. ZooKeeper 启动
  • 3. ZooKeeper 选举机制
  • 4. Follower(跟随者)和Candidate(候选者)节点区别
  • 5. Leader节点挂掉期间写操作是否会丢失

1. ZooKeeper 集群

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

下面是 ZooKeeper 集群的一般配置和工作原理:

  • 集群配置: 一个 ZooKeeper 集群通常由多个 ZooKeeper 服务器组成,这些服务器分布在不同的物理节点上。在集群中,每个服务器都知道其他服务器的存在,并且彼此协调工作以提供一致性和可用性。

  • Leader 选举: 在 ZooKeeper 集群中,每个服务器可能处于三种状态之一:Leader、Follower 和 Observer。Leader 负责处理客户端的写请求,并将更新广播给其他服务器;而 Follower 和 Observer 则负责接收更新并复制数据。当一个 ZooKeeper 服务器启动或者 Leader 失效时,集群中的服务器会通过一种选举算法选出新的 Leader,以确保系统的可用性。

  • 数据同步: ZooKeeper 使用 ZAB(ZooKeeper Atomic Broadcast)协议来确保数据的一致性和可靠性。当 Leader 收到写请求时,它会将请求转发给所有的 Follower,并等待大多数 Follower 确认写操作,然后再将写操作应用到本地状态。这种方式确保了数据的一致性,并且即使在部分服务器故障的情况下,系统仍然可以继续工作。

  • 客户端访问: 客户端可以通过连接到任意一个 ZooKeeper 服务器来访问集群,一旦连接建立成功,客户端就可以向任意一个服务器发送读写请求。如果客户端连接的是 Follower 或 Observer,那么它会被重定向到 Leader,并在 Leader 上执行操作。

  • Watch 机制: ZooKeeper 提供了 Watch 机制,允许客户端在节点状态发生变化时接收通知。客户端可以在节点上设置 Watch,当节点的状态发生变化时,ZooKeeper 会向客户端发送通知,客户端可以据此执行相应的逻辑。

通过以上机制,ZooKeeper 集群可以提供高可用性、一致性和可靠性的分布式协调服务,使得开发人员能够轻松构建分布式系统和应用程序。
在这里插入图片描述

2. ZooKeeper 启动

1.启动Zookeeper集群
每个节点启动Zookeeper服务,节点间通过通信协议进行通信,并进行Leader选举。选举出Leader节点后,集群进入正常运行状态。

2.客户端连接
客户端使用Zookeeper提供的API连接到Zookeeper集群。客户端与集群建立连接,可以进行数据操作和监控节点变化。

3.数据操作
客户端可以向Zookeeper集群写入数据、读取数据或监听节点的变化。数据操作会通过Leader节点同步到所有的Follower节点,确保数据的一致性。

4.选举Leader
如果Leader节点失效,Zookeeper会触发新一轮的Leader选举。新选出的Leader节点负责维护集群状态,并同步数据到所有的Follower节点。

5.Watcher机制
客户端可以注册Watcher机制,监控节点的状态变化。当节点状态发生变化时,Zookeeper会通知客户端,客户端可以根据通知做出相应的处理。

6.关闭连接
客户端可以通过Zookeeper提供的API关闭与集群的连接。关闭连接后,客户端与集群的通信结束。

3. ZooKeeper 选举机制

ZooKeeper 集群中的选举是为了确保系统的可用性和一致性。在以下情况下,ZooKeeper 需要进行选举:

  • Leader 故障: 当当前的 Leader 出现故障或不可用时,需要选举一个新的 Leader 来接管领导权,以确保系统的正常运行。这种情况下,其他 ZooKeeper 服务器会通过一种选举算法选出新的 Leader。

  • 新节点加入: 当新的 ZooKeeper 服务器加入集群时,需要选举一个 Leader 来维护集群的状态和数据一致性。新节点会参与选举,并且如果选举成功,它可能成为新的 Leader。

  • 集群初始化: 在集群初始化阶段,当第一个 ZooKeeper 服务器启动时,它会尝试成为 Leader。如果此时没有其他节点加入集群,那么它就会成为唯一的 Leader。

ZooKeeper 的选举基本原理如下:

  • 选举协议: ZooKeeper 使用的是基于 Paxos 算法的 Zab 协议(ZooKeeper Atomic Broadcast)。在 Zab 协议中,节点分为两种角色:Leader 和 Follower。Leader 负责处理客户端请求和状态变更,而 Follower 则从 Leader 处同步状态。

  • 节点状态: 在 ZooKeeper 集群中,每个节点都有一个状态(状态包括LOOKING、FOLLOWING、LEADING、OBSERVING四种)。节点状态的转换由选举过程决定。

  • 选举过程:

    • 当一个节点启动时,它首先会进入 LOOKING 状态,表示它正在寻找 Leader。
    • 在 LOOKING 状态下,节点会向其他节点发送消息,请求它们投票支持自己成为 Leader。
    • 如果收到了大多数节点的投票,那么该节点就会成为 Leader,并将状态切换为 LEADING。
    • 如果一个节点在一定时间内没有收到足够多的投票或者发生了网络分区等情况,它会重新进入 LOOKING 状态,重新发起选举。
    • 在选举过程中,如果某个节点成为 Leader,那么其他节点会将自己的状态切换为 FOLLOWING,并开始与 Leader 同步数据。
  • 投票机制: 在选举过程中,每个节点都有权利投票。节点在投票时会考虑自己的选票以及其他节点的选票,选择投给谁。通常情况下,节点会投给与自己相同或者更新的节点。此外,每个节点只能投一次票,并且一旦投出去就不能更改。

4. Follower(跟随者)和Candidate(候选者)节点区别

在Zookeeper中,Follower(跟随者)和Candidate(候选者)节点是Zookeeper集群中不同角色的节点,它们在集群中扮演着不同的角色和责任。

Follower节点(跟随者):

  • Follower节点是Zookeeper集群中的普通节点,它们的主要责任是参与Leader选举和数据同步。
  • Follower节点跟随Leader节点,对客户端的读请求进行处理,并与Leader节点保持数据同步。
  • Follower节点只能接收来自Leader节点的消息,并不能主动发起消息。

Candidate节点(候选者):

  • Candidate节点是在进行Leader选举时,从Follower节点中选出的临时候选节点。
  • 候选者节点在Leader选举期间参与投票,如果获得了大多数Follower节点的选票,就会成为新的Leader节点。
  • 候选者节点会在选举超时时间内等待Follower节点的投票结果,如果在超时时间内没有获得足够的选票,就会重新成为Follower节点。

总的来说,Follower节点是普通节点,负责数据同步和处理客户端的读请求;而Candidate节点是在Leader选举期间临时产生的候选者,参与选举过程,有可能成为新的Leader节点。

5. Leader节点挂掉期间写操作是否会丢失

在Zookeeper中,如果Leader节点挂掉,会触发新的Leader选举过程。在这个过程中,集群中的Follower节点会尝试选举出一个新的Leader节点来接管集群的工作。在Leader节点挂掉期间,写操作不会丢失,因为Zookeeper保证了数据的持久性和一致性。

具体来说,Zookeeper采用了多数投票的机制,确保数据的一致性。在进行写操作时,客户端会将写请求发送给Leader节点,Leader节点会将写请求分发给集群中的Follower节点,并等待大多数节点的确认。只有在大多数节点确认接收到写请求后,Leader节点才会将写操作应用到自身和其他节点的数据中,然后返回响应给客户端。因此,即使Leader节点挂掉,只要大多数节点能够正常运行,写操作就不会丢失,因为新的Leader节点会继续按照多数节点确认的原则进行数据操作。

需要注意的是,如果写操作发生在Leader节点挂掉期间,并且没有足够多的节点进行确认,那么写操作可能会被视为失败,但这并不意味着数据丢失,因为一旦新的Leader节点选举成功,写操作会被重新提交并应用到数据中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Node.js------模块化

◆ 能够说出模块化的好处◆ 能够知道 CommonJS 规定了哪些内容◆ 能够说出 Node.js 中模块的三大分类各自是什么◆ 能够使用 npm 管理包◆ 能够了解什么是规范的包结构◆ 能够了解模块的加载机制 一.模块化的基本概念 1.模块化 模块化是指解决一个复杂问题时&#xff0c…

基于SpringBoot+Thymeleaf的学生会管理系统

在这里插入图片描述 在这里插入图片描述

MYSQL——索引概念索引结构

索引 索引是帮助数据库高效获取数据的排好序的数据结构。 有无索引时,查询的区别 主要区别在于查询速度和系统资源的消耗。 查询速度: 在没有索引的情况下,数据库需要对表中的所有记录进行扫描,以找到符合查询条件的记录&#…

现在优秀企业都用SaaS知识库工具,原因就在这里

在这个信息化、知识化时代,企业的竞争力往往取决于能否有效管理和利用内部的知识资源。而如何实现这一任务呢?答案就在SaaS知识库工具。现在,很多优秀的企业已经使用了SaaS知识库工具进行知识管理,那么,他们为什么要这…

【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)

[蓝桥杯 2019 国 AC] 轨道炮 题目描述 小明在玩一款战争游戏。地图上一共有 N N N 个敌方单位,可以看作 2D 平面上的点。其中第 i i i 个单位在 0 0 0 时刻的位置是 ( X i , Y i ) (X_i, Y_i) (Xi​,Yi​),方向是 D i D_i Di​ (上下左右之一, 用…

kubadm部署kubernetes

什么是kubernetes Kubernetes是一款应用于集群的,容器自动部署、扩展和管理的开源平台,提供了一种以容器为中心的基础架构。利用kubernetes,你可以快速高效地响应客户如下请求: 应用程序的动态、精准部署应用程序的动态扩展无缝推…

【机器学习】K-近邻算法(KNN)介绍、应用及文本分类实现

一、引言 1.1 K-近邻算法(KNN)的基本概念 K-近邻算法(K-Nearest Neighbors,简称KNN)是一种基于实例的学习算法,它利用训练数据集中与待分类样本最相似的K个样本的类别来判断待分类样本所属的类别。KNN算法…

2024福建三支一扶报名流程,超全超详细!

2024年福建三支一扶报名已经开始,请注意时间! ⚠2024年福建省省级“三支一扶”计划招募岗位1070个 报名时间:4月1日8:00至4月17日17:00 审查考核:4月18日至5月10日 确定派遣人员:5月11日至5月31日 报名入口&#xff1…

数据质量决定大模型能力,景联文科技提供高质量大模型数据

随着大模型的深入发展,各类资源要素的配置状态已悄然变化。其中,数据的价值已被提升到一个新高度。 大模型往往拥有庞大的参数和复杂的网络结构,需要大量的数据来学习和优化。数据的质量和数量直接决定了模型的训练效果。若数据不足或质量不佳…

【JavaScript 漫游】【051】Set 和 Map 数据结构

文章简介 本篇文章为【JavaScript 漫游】专栏的第 051 篇文章,记录了 ES6 规范新增的 Set 和 Map 数据结构的相关知识点。 SetWeakSetMapWeakMap Set 基本用法 类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函…

IT外包行业未来发展趋势

随着企业对高可用性系统和分布式系统需求的增加,IT人才外包行业迎来了前所未有的发展机遇。未来几年, IT外包行业将呈现出一系列发展趋势 首先,IT外包人才队伍将不断壮大。随着企业对人效的需求日益增长,以及为规避用工风险和降低…

StarRocks实战——携程火车票指标平台建设

目录 前言 一、早期OLAP架构与痛点 二、指标平台重构整体设计 2.1 指标查询过程 2.1.1 明细类子查询 2.1.2 汇总类子查询 2.1.3 “缓存” 2.2 数据同步 三、Starrocks使用经验分享 3.1 建表经验 3.2 数据查询 3.3 函数问题 四、查询性能大幅提升 五、 后续优化方…

LeetCode575——分糖果

题目链接:. - 力扣(LeetCode) 这道题比较简单,但我还是花费了将近四个小时的时间去解答,AC的那一刻,终于全身舒畅,这道题的思路就是先求出糖果的种数,然后我们从题中可以得出&#x…

PMP备考需要多长时间?

PMP备考需要多久?50天就能顺利学完 PMP考试备考时间需要看自己的工作安排了,学习周期要恰到好处,太长的话可能导致边学边忘,根本来不及总结冲刺;太短的话又会造成学习内容掌握不稳定,导致考试的时候发挥失…

JavaScript(一)基础

文章目录 一、JS介绍JavaScript是什么JavaScript书写位置JavaScript的注释输入输出语法字面量 二、变量变量是什么变量基本使用变量的本质变量命名规则与规范变量拓展-数组var与let的区别 三、常量四、数据类型数据类型检测数据类型数据类型转换隐式转换显式转换 简单运算符断点…

3.冒泡排序

冒泡排序 基本思想:每次比较两个相邻的元素 如果它们的顺序错误就把它们交换过来 重点:交换 时间复杂度为:O(n^2)(平均情况、最坏情况) 最优情况:输入的数组已经是完全有序的时候 冒泡排序只需要进行一…

day11 java不同对象的关联与内存分析 JavaBean用途及讲解 import导入包

不同对象的关联与内存分析 内存图: 对象的属性是另一个对象时,在堆内存内该属性对应的值是另一个对象的首地址(指向另一个堆内存内另一个对象),两对象建立了联系,可以根据箭头间接调用。 JavaBean…

基于SpringBoot + Vue实现的员工绩效考核管理系统设计与实现+毕业论文+PPT+任务书+搭建视频

介绍 系统包含员工和管理员两个角色 管理员: 部门管理:负责创建、修改和删除部门,以及为部门设置权限和角色。 岗位管理:定义和管理岗位信息,包括添加、修改和删除岗位,以及设置岗位的职责和要求 员工…

一、企业级架构之LNMP

一、LNMP 概述 1、LNMP之间的关系: LNMP Linux Nginx MySQL PHP 2、配置LNMP服务器: (1) 克隆一台centos7虚拟机,修改 IP 地址 和 UUID 编号。 IP 为 10.1.1.10,UUID 修改后三位。 (2) 设置主机名称,绑定IP地…

计算机组成原理-10-控制单元的设计

10. 控制单元的设计 文章目录 10. 控制单元的设计10.1 组合逻辑设计10.1.1 CU外特性10.1.2 微操作的节拍安排10.1.3 组合逻辑设计步骤 10.2 微程序设计10.2.1 微程序设计思想10.2.2 微指令格式10.2.3 毫微程序设计10.2.4 微程序设计举例 完结撒花 本笔记参考哈工大刘宏伟老师的…