ZAB协议:
专门为ZK设计的,支持崩溃恢复的原子广播协议
ZAB协议的特性:
1、确保 主节点的事务提交了,从节点的事务也必须提交
2、丢弃 在主节点上提出但是没有被提交的事务
作用:
1、使用主节点接收写请求,通过ZAB原子广播协议步到子节点
2、保证全局操作顺序执行
3、主节点挂了,整个ZK正常工作
ZAB原理:
ZAB节点三种状态:Following(服从主节点)、Leading(负责事务协调)、Looking(选举状态,寻找主节点)
1、发现:ZK集群通过选举机制选出主节点,主节点维护了子节点列表
2、同步:主节点将本身的数据与从节点同步,做到多副本存储,从节点把未消费完的队列消息处理完成后,写入到本地事务日志中;
3、广播:接收写请求,生成事务,同步到从节点;
广播步骤:
1、发起写请求;
2、主节点接收请求并转换成事务提案,生成全局唯一的ZXID;
3、主节点给每个从节点单独分配一个FIFO阻塞队列,并将消息放进队列中;
4、从节点把事务日志写到本地磁盘后,给主节点ACK确认
5、主节点收到半数以上的从节点消息确认就认为消息被从节点接收成功
6、主节点发出commit消息给从节点;同时完成自身的提交,从节点会将上一次事务提交
ZAB四个阶段:
1、选举
2、主节点和从节点通信
3、数据同步
4、原子广播