4. ZAB协议
一、什么是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...