Zookeeper Automic Broadcast(ZAB),是paxos经典实现。
ZAB(zookeeper)中节点分四个状态:
1.looking:选举leader的状态(崩溃下恢复)
2.follwing:跟随者(follower)的状态,服从leader的命令
3.leading:当前节点是Leader,负责协调工作
4.observing:observer(观察者),不参与选举,只读节点;
ZBA中的两种模式:崩溃恢复,消息广播;
崩溃恢复阶段,在恢复阶段没个server,既是提交者,又是批准者;
1.每个没有崩溃的server都有一张选票,投给自己
2.搜集各个服务器的投票
3.比较投票,比较逻辑:优先比较事务Id(取最大的),然后比较leader的周期id(如果事务Id相同再比较周期Id,取最大);
4.改变服务器的状态(崩溃恢复==>数据同步,或者崩溃恢复===》消息广播)
在查看节点信息时 有Zxid(64位数据结构)属性,他是有周期ID和事务Id组成;前32位是Leader的周期Id(myId),后32位表示事务的自增序列(单调递增序列),只要客户段请求,后32位就会加一递增;