zookeeper zab协议(二)

2017-10-23  本文已影响68人  5d44bc28b93d

zookeeper zab协议

zab协议概述


ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。

问题的提出


zab四个阶段


zookeeper 的读写


zookeeper只有在确定leader后才能开始写入(因此需要快速选举)

  1. client 发送写请求到server
  2. server 接收到请求将请求发送给leader server
  3. leader server 生成一个新的epoch,并广播这个提议,注(zxid的高32为代表当前leader的年号,低32代表事务的序号)
  4. leader server 等待 followers 的ack,如果超过半数follower确认则commit此提议.

zookeeper的读取过程没有写入复杂

  1. client 发送读取请求到server
  2. server 接收到request后从本地获取数据,然后将结果返回

<p style="color:red"> 注意 此时有一个中间状态,即当有半数server响应了ack,而client此时请求的是未响应的server则此时获取的数据并不是最新的。解决方案是调用client的Sync方法,可以同步单个节点的数据 </p>

zookeeper客户端相关


如果client连接的客户端由于网络原因断开了clientapi会不断重试直到找到服务列表中一台能够连接上的server为止

leader崩溃与恢复


如果集群中leader崩溃了,那么leader还没有commit的事务将丢失,如果commit广播已经发出则不会丢失,因为follower会从剩下的机器集群中选举并重新产生出新的leader,此时选取的都是zxid最大的为leader因为zxid最大说明数据最新,保证了数据不丢失。
如果follower崩溃后重连则会重新同步与leader的数据。

上一篇 下一篇

猜你喜欢

热点阅读