zoukankan      html  css  js  c++  java
  • ZooKeeper之ZAB协议

    ZAB协议

    Zookeeper的核心是原子广播,这个机制保证了server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,分别是恢复模式和广播模式。当服务启动或者在领导者崩溃后,Zab就进入恢复模式。当领导者被选举出来,且大多数server的完成了和leader的状态同步之后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。

    ZAB协议由崩溃(故障)恢复和消息广播组成

    事物

    在ZAB协议中,每个事物都有一个编号ZXID,ZXID由两部分组成,高32位是epoch,底32位为递增计数器。

    • epoch:选举周期
    • 计数器:随事物的到来递增

    故障恢复(选举和数据恢复)

    1. 选举
      只需要保证选举出来的leader服务器拥有集群中所有机器最高编码(ZXID最大)的事物proposal,那么就可以保证这个新选举出来的leader一定具有。

    2. 数据同步

    leader会为每一个follower服务器准备一个队列,将那个没有被各个follower同步的事物以proposal的形式逐个发送给follower服务器,并在proposal后面紧接着发送一个Commit消息,以表示该事物已经被提交,当follower将数据同步完成之后,leader会将follower将数据同步完成之后,leader会将follower加入到真正可以的follower列表中。

    故障恢复:算法描述

    1. 每个follower会将自己最后接收的事物proposal的epoch发送给准leader。
    2. 准leader在收到所有的epoch中选举一个最大值,在此基础上加一形成新的选举周期,发送给所有的follower。
    3. follower收到后会更新自己的epoch,并反馈给准leader一个ACK,同时携带历史事物集合。准leader收到所有的follower的历史事物集合之后,会形成初始事物集合。

    故障恢复:同步

    1. 准leader将初始化事物集合发送给集群中所有的follower
    2. follower收到后对于其中的每一个事物,folllower都会接受,最后将结果反馈给leader,表示已经接受并处理了初始化事物集合中的事物。
    3. leader收到来自过半的leader的反馈,就会向所有的leader发送commit消息。

    消息广播

    在leader健在的时候由leader实现

    1. 发送给集群中的所有follower
    2. 收到过半的ACK
    3. 发送commit提交事物
  • 相关阅读:
    事务处理多数据库的方法
    微信定位js
    linux命令大全
    git团队协作
    springboot入门的一点基础
    Spring Boot Actutaur + Telegraf + InFluxDB + Grafana 构建监控平台
    Hadoop+HBase+ZooKeeper三者关系与安装配置
    Centos7网络配置-转载
    【Java EE 学习 21 下】【 使用易宝支付接口实现java网上支付功能】
    linux 中 iptables关于ping的问题
  • 原文地址:https://www.cnblogs.com/we9999/p/12398314.html
Copyright © 2011-2022 走看看