Zookeeper -ZAB协议

Zookeeper -ZAB协议

ZAB写实一直基于Paxsor算法衍生出来的一种为zookeeper提供原子广播和崩溃恢复的协议;

用来保证zk的数据一致性和服务的可用性

原子广播

image-20220427142153279

步骤:

  1. 发送requset请求到zk的leader节点, 如创建节临时节点
  2. leader收到请求后,生成zxid
    1. 向所有follower节点发送proposal提议,
    2. 同时向本地写数据文件(transactionlog事务日志);
    3. 给自己发送一个ack
  3. follower节点收到proposal后
    1. 向本地写数据文件
    2. 返回ACK 给leader节点
  4. leader 收到 过半ACK确认后
    1. 发送inform让observer存储消息
    2. 向follower发送commit proposal
    3. commit 本服务的内存数据
    4. 返回节点变更通知给客户端 (触发客户端监听事件)
    5. 返回命令操作结果
  5. follower收到通知后,执行commit请求

崩溃恢复

  1. ZAB 协议确保丢弃那些只在 Leader 提出/复制,但没有提交的事务。
  2. ZAB 协议确保那些已经在 Leader 提交的事务最终会被所有服务器提交
  3. Leader 服务器会根据自己服务器上最后被提交的 ZXID 和 Follower 上的 ZXID 进行比对,比对结果要么回滚,要么和 Leader 同步
选举和发现
  1. 参与选举的服务状态全部为Looking;对当前服务的选举周期进行++;给自己投票;

  2. 将选票通过广播的形式发送给其他follower;

  3. 服务收到其他服务节点选票 ,将收到的选票自己的选票做比较

    1. 如果收到的选票>自己的选票周期,
      1. 更新自己的选票周期
      2. 更新自己的选票
      3. 向所有节点发送自己的选票
    2. 选票周期相等
      1. 根据zxid比较; 使用zxid大的选票
      2. zxid相同,选举sid大服务为leader
      3. 向所有节点发送自己的选票
  4. 直到存在一个服务的选票超过一半,选举结束

    1. 将该服务下设置为leader
    2. 其他的服务状态设置为follower
数据同步
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值