当前位置: 代码网 > 服务器>网络>网络协议 > Zookeeper的ZAB协议原理详解

Zookeeper的ZAB协议原理详解

2024年07月31日 网络协议 我要评论
如何保证数据一致性。Paxos,吸收了主从。zk = 数据模型+Watch机制zab zookeeper原子广播协议。

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节点处于选举状态

崩溃恢复案例

在这里插入图片描述

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

在这里插入图片描述

(0)

相关文章:

  • 数据仓库的概念和作用?如何搭建数据仓库?

    数据仓库是一个专门用于集成、存储和管理企业各类数据的系统。它将来自多个源头的数据整合到一个集中的位置,以提供一致性、可靠性的数据供各种分析和报告使用。数据仓库通常包括历史数据,允许…

    2024年07月31日 网络
  • 数据仓库技术与应用

    数据仓库技术与应用

    然而,本地数据仓库的弹性较低,需要企业通过复杂的预测来确定如何扩展数据仓库,以满足未来需求。数据仓库能够集中、整合多个来源的大量数据,借助数据仓库的分析功能,企... [阅读全文]
  • ZooKeeper 核心知识总结!

    Zookeeper 基本介绍Apache ZooKeeper 是由Apache Hadoop的子项目发展而来,为分布式应用提供高效且可靠的分布式协调服务。在解决分布式数据一致性方面…

    2024年07月31日 网络
  • Zookeeper教程1

    Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务。Zookeeper 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、Hiv…

    2024年07月31日 网络
  • Zookeeper 集群节点故障剔除、切换、恢复原理

    Zookeeper 集群节点故障剔除、切换、恢复原理

    在 Zookeeper 集群中,通过心跳机制检测和剔除故障节点,通过 ZAB 协议进行领导节点选举和数据同步,确保集群在节点故障时仍能保持高可用性和一致性。领导... [阅读全文]
  • ZooKeeper基础学习和API编写

    ZooKeeper基础学习和API编写

    事务id(ZXID)在某个时刻,每台服务器的ZXID不一定一致,跟更新请求后的更新逻辑有关系,操作或则数据在某一时刻不是绝对一致的。服务器id(SID),用来唯... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com