美文网首页
[Zookeeper] 分布式协议ZAB协议

[Zookeeper] 分布式协议ZAB协议

作者: LZhan | 来源:发表于2020-01-29 14:46 被阅读0次

    1 前言

    相对于paxos的通用性,zab是专用于zookeeper。Zookeeper原子消息广播协议,实现一种主备模式框架下来保持各集群中各副本之间的数据一致性。

    这里的主备系统架构模型,就是指只有一台客户端(Leader)负责处理外部的写事务请求,然后Leader客户端将数据同步到其他Follower节点。

    Zookeeper 客户端会随机的链接到 zookeeper 集群中的一个节点,如果是读请求,就直接从当前节点中读取数据;如果是写请求,那么节点就会向 Leader 提交事务,Leader 接收到事务提交,会广播该事务,只要超过半数节点写入成功,该事务就会被提交。

    2 ZAB协议实现过程

    2.1 消息广播

    1.消息(Proposal和Zxid)
    Leader服务器将每个事务请求生成对应的Proposal,并为这个Proposal分配一个全局单调递增的唯一ID(ZXID,64位,前32位是周期epoch,后32位是单调递增的计数器)。
    2.广播过程
    leader和follower之间都一个队列,leader将消息发送到该队列,将Proposal广播给所有的follower服务器,follower服务器以事务日志的形式写入磁盘,成功写入后反馈给leader一个ACK响应;
    当Leader服务器接收到超过半数的ACK响应后,开始广播commit消息,同时Leader服务器自身完成对事务的提交,每一个follower服务器接受到commit消息后也完成对事务的提交。

    2.2 崩溃恢复

    当Leader服务器出现故障后,就会进入崩溃恢复模式,崩溃恢复要求:
    1.确保已经被leader提交的proposal必须最终被所有的follower服务器提交;
    2.确保丢弃已经被leader提出的但是没有被提交的proposal。

    优先选择出拥有最大ZXID的Proposal的服务器作为Leader,以满足上述要求,之后进行数据同步。

    2.3 数据同步

    Leader会将自身的提交的最大Proposal的事务Zxid发送给其他的follower节点。
    follower节点会根据leader的消息进行回退或者数据同步操作。最终的目的是要保证集群中所有节点的数据副本保持一致。

    3 ZAB协议原理

    ZAB协议要求每个Leader都要经历三个阶段,发现,同步,广播
    (1)发现:即要求zookeeper集群必须选择出一个leader进程,同时leader会维护一个follower可用列表,将来客户端可以与可用列表中的节点进行通信。
    (2)同步:leader要负责将本身的数据与follower完成同步,做到多副本存储。这也是体现了CAP中的高可用和分区容错。follower将队列中未处理完的请求消费完成后,写入本地事务日志中。
    (3)广播:leader可以接收客户端新的Proposal请求,将新的Proposal请求广播给所有的follower。

    分布式理论

    相关文章

      网友评论

          本文标题:[Zookeeper] 分布式协议ZAB协议

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