4. ZAB协议

  • db
  • zookeeper

一、什么是ZAB协议

ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持 崩溃恢复 和 原子广播 协议。

二、Zookeeper集群中的角色

  • Leader:有且只有一个Leader,它会发起并维护与各Follower及Observer间的心跳。所有的写操作必须要通过Leader完成再由Leader将写操作广播给其它服务器
  • Follower:一个ZooKeeper集群可能同时存在多个Follower,它会响应Leader的心跳。Follower可直接处理并返回客户端的读请求,同时会将写请求转发给Leader处理,并且负责在Leader处理写请求时对请求进行投票
  • Observer 角色与Follower类似,但是无投票权,不参与选举

三、ZAB实现

原子广播: 所有的写操作都必须由Leader完成,Leader写入本地日志后再同步给所有的Follower节点。

崩溃恢复: 当Leader节点无法工作,根据ZAB协议能够自动从Follower节点中重新选出一个合适的替代者,即新的Leader,该过程即为领导选举。该领导选举过程,是ZAB协议中最为重要和复杂的过程。

3.1 原子广播

两阶段提交。leader负责给所有follower同步写操作

  • 当有一半以上的follower回复正确的ack时,leader会发起commit操作。
  • 当有小于一半的follower回复正确的ack时,leader不会发起commit操作。

没有commit的数据,对客户端不可见

3.2 崩溃恢复

先来了解下下面几个关于zookeeper的字段:

  • 服务器 ID(myid):编号越大在选举算法中权重越大
  • 事务 ID(zxid):值越大说明数据越新,权重越大
  • 逻辑时钟(epoch-logicalclock):同一轮投票过程中的逻辑时钟值是相同的,每投完一次值会增加
  • 选举状态:
    • LOOKING: 竞选状态
    • FOLLOWING: 随从状态,同步 leader 状态,参与投票
    • OBSERVING: 观察状态,同步 leader 状态,不参与投票
    • LEADING: 领导者状态

???????????好复杂,不写了

Loading...