Zookeeper的ZAB协议原理详解

Zookeeper的ZAB协议原理详解

如何保证数据一致性。

Paxos,

吸收了主从。

zk = 数据模型+Watch机制

zab zookeeper原子广播协议。

ZAB概念

ZooKeeper是通过Zab协议来保证分布式事务的最终一致性。

Zab(ZooKeeper Atomic Broadcast,.ZooKeeper原子广播协议)支持崩溃恢复,基于该协议,ZooKeeper实现了一种主备模式的系统架构来保持集群中各个副本之间数据一致性。

在这里插入图片描述

在ZooKeeper集群中,所有客户端的请求都是写入到Leader进程中的,然后,由Leader同步到其他节点,称为Follower.。在集群数据同步的过程中,如果出现Follower节点崩溃或者Leader进程崩溃时,都会通过Zab协议来保证数据一致性。
Zab协议的具体实现可以分为以下两部分:

  • 消息广播阶段

    • 大部分时期的模式,正常工作模式
    • 数据同步问题
    • Leader负责处理客户端的写入操作,接受事务提交,每次接受一个事务的时候就会产生一个提案对象(Proposal)请求广播给
      Follower,Leader收集各个节点的反馈,然后在决定是否Commit(提交事务,真正写入zk)。
  • 崩溃恢复阶段

    • 不能对外提供功能,CP

    • 选举问题

    • 比如Leader宕机,会进入到崩溃恢复节点,重新进行选举,崩溃恢复阶段还包括数据同步的操作,同步集群中最新的数据,保持集群一
      致性

    • 一般情况下,数据最新的会当选为主节点

    当Leader可用时,正常的消息广播阶段
    当Leader不可用时,进入到崩溃恢复阶段,选举完成新的Leader)后会进行数据同步,当数据同步完成以后,此时才会重新进入到消息广播阶
    段。

事务编号ZXid

ZXid(64位) = epoch(年代) + 递增器 32

Zxid是Zb协议的一个事务编号,Zxd是一个64位的数字,其中低32位是一个简单的单调递增计数器,针对客户端每一个事务请求,计数器
加1;而高32位则代表Leader周期年代(Epoch)的编号。

周期年代的概念和Raft中Term(任期)概念是一样的。

在这里插入图片描述

每次有一个新的Leader选举出现时候,Leader服务器取出本地日志中最大的事务ZXID,读取epoch值,进行+1操作,作为新的周期ID。

ZAB流程分析

ZAB流程可以拆分为:消息广播–>崩溃恢复–>数据同步

消息广播

在ZooKeeper中所有的事务请求都由Leader节点来处理,其他服务器为Follower,Leader将客户端的事务请求转换为事务Proposal,并且将Proposal分发给集群中其他所有的Follower。
完成广播之后,Leader等待Follwer反馈,当有过半数的Follower反馈信息后,Leader就commit,将再次向集群内Follower广播Commit信息,Commit信息就是确认将之前的Proposal提交。

Acknowledge 承认

ACK (Acknowledge character)即是确认字符

在这里插入图片描述

崩溃恢复

下面的几种情况都会进入崩溃恢复阶段:

  • 初始化集群,刚刚启动的时候,无主

  • Leader崩溃,因为故障宕机

  • Leader失去了半数的机器支持,与集群中超过一半的节点断连,比如:发生了网络分区

崩溃恢复模式会开启新一轮的选举,选举产生的Leader会与过半的Follower进行数据同步,使数据一致,推出崩溃恢复模式,进入到消息广播模式。

状态说明
Following当前节点是跟随者,服从Leader节点的命令
Leading当前节点是Leader,负责协调事务
Election/Looking节点处于选举状态

崩溃恢复案例

在这里插入图片描述

server2 Leader节点挂了

1.各个节点变更状态,变更为Looking
  • Leader、Follower、Observer,Observer不参数与选举
  • Leader挂了,Follower都会将自己的状态改为Looking:状态,开始进入Leader选举过程。
2.各个Server节点都会发出一个投票,参与选举
  • 第一次投票,每个Sevr都会投自己一票,发送给集群中的所有机器
  • 在运行期间并不是所有Server的ZXID都是一致的(事务引D,越大数据版本越新,数据越完整)
3.集群接收来自各个服务器的投票,开始处理投票和选举
  • 处理选票的过程其实就是对比ZXID的过程,假设3号Server的ZXID最大,比如Server1收到Server3的选票,发现Server:3比自己的Zxid要
    大,Server1就投票给Server3。
  • 首先会判断Epoch(Term任期)
  • 如果Epoch相等,则选择ZXID最大。
  • 加入Epoch相等,ZXID也一样的,zoo.cfg中为了区分每个服务器,都会给服务器一个编号,myid。此时就对比myid。

在选举过程中,如果有节点获得超过半数的投票数,则会成为Leader节点,反之则重新投票选举。

在这里插入图片描述

4.选举成功,改变服务器的状态,参考上面这张图的状态变更

数据同步:

崩溃恢复完成选举以后,接下来的工作就是数据同步,在选举过程中,通过投票已经确认Leader服务器是最大Zxid的节点,同步阶段就是利用
Leader前一阶段获得的最新Proposal历史,同步集群中所有的副本。

对比RAFT

在这里插入图片描述

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

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

相关文章

企业员工上班摸鱼行为老板怎么管?

在数字化时代,员工摸鱼现象成为企业普遍面临的挑战。摸鱼不仅会降低工作效率,影响企业的正常运营,还可能引发数据泄露等安全问题。因此,企业需要采取有效的措施来防止员工上班摸鱼。 来百度APP畅享高清图片 一、制定明确的规章制…

NBlog Java定时任务-备份MySQL数据

NBlog部署维护流程记录(持续更新):https://blog.csdn.net/qq_43349112/article/details/136129806 为了避免服务器被攻击,给博客添加了一个MySQL数据备份功能。 此功能是配合博客写的,有些方法直接用的已有的&#xf…

【LAMMPS学习】三、构建LAMMPS(7)具有额外构建选项的软件包

3. 构建 LAMMPS 3.7.具有额外构建选项的软件包 当使用某些包进行构建时,除了Build_package页面上描述的步骤之外,可能还需要额外的步骤。 ​ 对于CMake构建,可能有额外的可选或必需的变量要设置。对于使用make进行构建,可能需…

Linux课程____进程管理

记录工作日志 script 240319.log CTRLd 退出 cat 240319.log //查看 一、查看进程 1.静态 ps -aux 显示所有包含其他使用者的行程 ps -elf 2.动态 top 3.pgrep 查看特定条件的进程 pgrep -l “log” 搜索特定的程序 pgrep -l "ssh" pgrep -l -U…

docker的常用命令

文章目录 Docker安装镜像管理列出镜像命令解析功能输出信息示例用途 拉取镜像构建镜像查找镜像删除镜像清理无用镜像 容器管理运行容器命令解析运行容器可选参数示例 列出容器列出所有容器(包括停止的)停止容器启动容器进入容器删除容器清理无用容器 容器…

高精度铸铁平台制造工艺有多精细——河北北重机械

高精度铸铁平台制造工艺通常包括以下几个步骤: 材料准备:选择合适的铸铁材料,并确保其质量符合要求。常用的铸铁材料包括灰铸铁、球墨铸铁等。 模具制造:根据平台的设计要求,制造适用的模具。模具一般由砂型、金属模具…

递归算法总结

递归算法总结 1、粗解递归算法2、递归算法例题(不包含其他算法,纯递归)eg1:LC509 fibonacci数列(简单)(0)题目描述(1)思路分析(2)pyth…

图论中的最小生成树:Kruskal与Prim算法深入解析

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:アンビバレント—Uru 0:24━━━━━━️💟──────── 4:02 🔄 ◀️ ⏸ ▶️ ☰ …

Prometheus+Grafana 监控Tongweb7(by lqw)

文章目录 1.准备工作2.Tongweb7部署3.Prometheus部署4.上传jar包并配置Tongweb75.Prometheus配置6.安装和配置Grafana 1.准备工作 本次参考:Prometheus监控Tongweb容器 1.使用虚拟机ip:192.168.10.51(tongweb),192.1…

vue iframe实现父页面实时调用子页面方法和内容

父页面标签添加鼠标按下事件 父页方法中建立iframe通信 实时调用子页面方法 实时更改子页面文本内容

Ubuntu上搭建TFTP服务

Ubuntu上搭建TFTP服务 TFTP服务简介搭建TFTP服务安装TFTP服务修改配置文件 重启服务 TFTP服务简介 TFTP是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适用于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只…

[C语言]——操作符详解

目录 一.操作符的分类 二.二进制和进制转换 1.二进制转十进制 2.二进制转八进制和十六进制 2.1二进制转八进制 2.2二进制转十六进制 三.原码、反码、补码 四.移位操作符 1.左移操作符 2.右移操作符 五.位操作符:&、|、^、~ 练习1:编写代码实…

腾讯云GPU云服务器简介_GPU服务器购买指南_GPU云服务器操作

腾讯云GPU服务器是提供GPU算力的弹性计算服务,腾讯云GPU服务器具有超强的并行计算能力,可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景,腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

Spring Boot Actuator介绍

大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉,会有未授权访问漏洞 include: "*" 他就是Actuator! 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…

漏洞挖掘技术综述与人工智能应用探索:从静态分析到深度学习,跨项目挑战与未来机遇

在网络安全和软件工程领域中,将机器学习应用于源代码漏洞挖掘是一种先进的自动化方法。该过程遵循典型的监督学习框架,并可细化为以下几个关键步骤: 数据预处理: 源代码解析与清理:首先对源代码进行文本解析&#xff…

zookeeper底层细节

zk 临时节点和watch机制实现注册中心自动注册和发现,数据都在内存,nio 多线程模型; cp注重一致性,数据不一致时集群不可用 事务请求处理方式 1.all事务由唯一服务器处理 2.将客户端事务请求转成proposal分发follower 3.等待半…

异常 --java学习笔记

异常 异常就是代表程序出现的问题 当一个方法出现问题,这个方法内部就会把这个问题的信息封装成一个异常对象,然后把这个异常对象抛给jvm虚拟机,jvm收到之后会先把出问题的程序先停下来,然后再把这个异常对象打印出来&#xff0c…

python之jsonpath的使用

文章目录 介绍安装语法语法规则举例说明 在 python 中使用获取所有结构所有子节点的作者获取所有子孙节点获取所有价格取出第三本书的所有信息取出价格大于70块的所有书本从mongodb 中取数据的示例 介绍 JSONPath能在复杂的JSON数据中 查找和提取所需的信息,它是一…

JavaMySQL高级一(下)

目录 1.常用函数 1.字符串函数 2.时间日期函数 3.聚合函数 4.数学函数 2.分布查询 3.子查询基础 1.简单子查询 1.常用函数 在程序开发过程中,除了简单的数据查询,还有基于已数据进行数据的统计分析计算等需求。因此,在SQL中将一…

电感回路中的电阻突然变大会怎样

大家好,我是砖一。 我们经常会看到这样一个电路,电感和电阻搭配在一块,加上5v供电,如果电感回路中的电阻突然变大会怎样? 假设电感L1100uH,电阻R110Ω。 图1 串入电感图 1,由开关状态分析电路…