美文网首页
Zookeeper-ZAB协议

Zookeeper-ZAB协议

作者: DoubleFooker | 来源:发表于2020-01-28 13:35 被阅读0次

ZK集群中角色

image.png

Leader

  • 提供数据读和写能力
  • 负责集群写请求的协调
  • 同步数据到follower
  • 参与选举

Follower

  • 提供数据读的能力
  • 同步leader数据
  • 转发写请求到leader节点
  • 参与选举

ObServer

  • 提供数据读能力
  • 不参与选举

ZAB保证数据的一致性

leader的处理过程

  • 集群中所有的事务请求转发到leader节点
  • leader节点生成全局事务Zxid,广播事务到所有follower节点
  • follower接收到广播并返回ACK
  • leader接受到过半节点ACK,则广播提出commit
  • 响应事务请求到客户端

ZAB协议保证了所有的请求有序性

  • 全局单调递增的事务id(zxid),zxid为64位数字。
  • zxid低32位为计数器,每产生一个事务请求,服务器进行加1操作。
  • zxid高32位为leader选举朝代(epoch),每次选举产生一个新leader节点,就会获取日志中最大的zxid,解析其epoch值,进行加1操作,并将低32位置零,生成新的zxid。

ZAB协议崩溃恢复模式特点
leader节点宕机/或者选举阶段得不到半数节点的反馈,则进入崩溃恢复阶段。

  • ZAB协议如果一个propose事务请求在一个节点上处理成功,那么应该所有节点都处理成功。
  • ZAB协议确保leader节点上提交的事务请求,已经commit的请求,最终在所有服务器提交。
  • ZAB协议确保只丢失在leader节点崩溃阶段收到的事务请求,还没commit。

ZAB协议的数据同步

  • leader节点同步过程逐条发送follower节点未同步的数据,并紧接着发送一个commit消息,表示事务已被提交。
  • follower节点同步完成后leader节点才会将节点标记为可用。
  • leader节点选举出来后,需等待follower节点同步leader节点数据,当超过半数节点完成同步,集群对外提供服务。

结合ZAB有序性及崩溃模式的约定,当崩溃的节点从leader节点变为follower节点后,leader节点会更具自身服务器上已提交的最后的proposal信息与follower节点上的proposal对比,发现follower有上一个朝代的proposal不一致,leader节点要求follower节点回退到leader节点proposal,即已被半数节点提交的事务请求。

leader选举
选举算法的要求

  • leader节点拥有最高zxid
  • 超过半数节点同意

选举过程的选票信息:

  • 服务器id,myid,集群配置时分配的服务器唯一id。
  • zxid,在服务器最大的事务id
  • 逻辑时钟,投票轮次的技术。选举阶段节点超过一定时间,没有收到过半节点的反馈,且未选举出leader节点则进入下一轮投票。
  • 选举的节点状态
    • Looking:竞选状态。
    • Following:随从状态,同步leader节点,参与选举。
    • Observing:观察状态,同步leader节点,不参与选举。
    • Leading:领导者状态。

选举的过程:

  • 每个服务实例均发起选举自己为leader节点的选票
  • 收到其他节点的选票信息,比较事务id是否比自己最新的事务id大,大则需改选票,投他一票。小则不投。相等则比较服务器id,选myid较大者。
  • 收到其他节点的选票后,判断是否超过半数选票指向同一个节点,是则选为leader,否则发起下一轮选举。

zk集群节点数为什么建议单数

ZK集群的容错约定宕机的数量必须小于集群剩下的可用节点数。即允许宕机节点<n/2。那么如果部署4个节点的集群,则允许宕机数为1(1<4/2)。如果部署3个节点的集群,则允许宕机个数为1(1<3/2)。对于这两个部署方案,同样允许宕机的数量都为1,那么使用3台服务器,比使用4台服务器节省资源。


公众号:


qr.jpg

相关文章

  • Zookeeper-ZAB协议

    ZK集群中角色 Leader 提供数据读和写能力 负责集群写请求的协调 同步数据到follower 参与选举 Fo...

  • git协议

    git支持的协议 local协议 https协议 ssh协议 git协议 github常用的协议

  • Dubbo服务 上传文件解决方案以及Hessian协议

    协议支持Dubbo支持多种协议,如下所示: Dubbo协议 Hessian协议 HTTP协议 RMI协议 WebS...

  • Procotol 和 Delegate

    目录 Procotol 协议的概念 协议的分类 协议的定义 协议的遵循 协议的方法 协议的属性 Delegate ...

  • 计算机网络题目

    几种协议分别属于哪一层传输层协议:TCP协议、UDP协议应用层协议:FTP、HTTP、SMTP网络层协议:IP协议...

  • ARP协议

    地址解析协议ARP 网络层四大协议:ARP协议,IP协议,ICMP协议,IGMP协议。 ARP(Address R...

  • IP数据报格式

    前言 先回顾一下TCP/IP协议栈 网络层的协议有IP协议、ARP协议、ICMP协议和IGMP协议。其中IP协议是...

  • 名词解析

    网络层:IP协议 : 网络协议ICMP协议: Internet互联网控制报文协议 ->IP协议的附属协议 IP...

  • 如何将Git仓库备份到本地

    git常用的传输协议传输协议.png哑协议:哑协议传输进度不可见;智能协议传输可见。传输速度:智能协议比哑协议传输...

  • NSURLSession学习笔记

    �Http协议-超文本传输协议 Http协议是应用层协议,底层要求的传输协议必须是可靠的传输协议,通常是TCP协议...

网友评论

      本文标题:Zookeeper-ZAB协议

      本文链接:https://www.haomeiwen.com/subject/omncpctx.html