zookeeper的ZAB算法

这个博客挺好的贴出来 ZAB协议 - 技术-刘腾飞 - 博客园

介绍:

        ZAB算法,原子广播协议,zk用于解决分布式系统数据一致性问题。

        ZAB协议中主要有两种模式,第一是消息广播模式;第二是崩溃恢复模式

消息广播:

        角色:1 zk客户端(client) 2 (从) Follower 3 (主) leader

写入操作

        1 客户端写操作发给从

        2 从把写操作发给主

        3 主给这个操作zid :例如是8

        4 主给从发log 写入日志(持久化),zk的目录树是在内存中,从写入log是写到硬盘中,发送给从的请求都是有序的(队列)

        5 从回复主 只要过半回复(过半同意,主也算一票)

        6 主 发送 写消息 给从,通知写入ok 

        7 从回复主OK

读取操作

        1 客户端请求从节点进行读取

        2 从节点进行sync操作,想主节点获取客户端需要读的最新数据

        3 从节点返回客户端

        注:sync可选,如果不sync同步读取主操作,从节点数据可能不是最新的

崩溃恢复:

        选举关键数据

                1  先看zxid 事务id 最高的

                2 myid 服务器自己的id

        选举过程

                1 集群启动的情况

                        启动的过程中超过3台的时候选 myid最大的(最后一个启动的)为主

                2 崩溃恢复选主

                        1 主挂了

                        2 从节点心跳发现主挂了

                        3 发现挂的从节点会 给其他人 通过链接 发起投票(发送当前节点的事务id和myid)

                        4 收到投票的从节点会判断,如果自己的事务id高,把自己的(事务id和myid)广播回去 给自己投票。

                        5 然后第一个从节点没拿到过半投票

                        6 第二个从节点发起投票后,大家都把票投给了他,第二个从节点获得投票

场景理解:任意个从节点A发起投票,广播自己的事务id和myid,其他从节点收到后,对比自己的事务id和myid,如果不如A节点大就头他,如果比A大就自己发起投票广播,最后拿到过半票的肯定是事务id和myid最大的那个。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值