设为首页 收藏本站
查看: 1694|回复: 0

[经验分享] zookeeper学习(三)

[复制链接]

尚未签到

发表于 2017-4-18 13:37:47 | 显示全部楼层 |阅读模式
         我想了想,还是决定将那篇讲ZAB协议的文章转载过来,ZK中提交事务采用的就是ZAB协议。
        转自:http://blog.csdn.net/m_vptr/article/details/9325405
  建议还是看原文,我转载到这里利于我查看。向原作者致敬。
  ps:个人感觉原博客的一张图画错了,就是那张Leader和Follower的通信图。个人感觉Commit应该是从Leader指向Follower的。
   
  ******************************原文如下************************************
      ZooKeeper内部有一个in-memory DB,表示为一个树形结构。每个树节点称为Znode(相关的代码在DataTree.java和DataNode.java中)
DSC0000.jpg
 
客户端可以连接到zookeeper集群中的任意一台。
DSC0001.jpg
 
      对于读请求,直接返回本地znode数据。写操作则转换为一个事务,并转发到集群的Leader处理。Zookeeper提交事务保证写操作(更新)对于zookeeper集群所有机器都是一致的。
  DSC0002.jpg
   ZooKeeper中提交事务的协议并不是Paxos,而是由二阶段提交协议改编的ZAB协议。
 
Zab可以满足以下特性
   Reliable delivery:如果消息m被一个server递交(commit)了,那么m也将最终被所有server递交。
   Total order:如果server在递交b之前递交了a,那么所有递交了a、b的server也会在递交b之前递交a。
   Casual order:对于两个递交了的消息a、b,如果a因果关系优先于(causally precedes)b,那么a将在b之前递交。
 
   第三条的因果优先指的是同一个发送者发送的两个消息a先于b发送,或者上一个leader发送的消息a先于当前leader发送的消息。
  
   Zab协议中Server有两个模式:broadcast模式、recovery模式(Leader宕机或follower不构成quorum)
 
   Leader在开始broadcast之前,必须有一个同步更新过的follower的quorum(多数派)。 
   Server在Leader服务期间恢复在线时,将进入recovery模式,与Leader进行同步。
 
   Broadcast模式使用二阶段提交,但是简化了协议,不需要abort。follower要么ack,要么抛弃Leader,因为zookeeper保证了每次只有一个Leader。另外也不需要等待所有Server的ACK,只需要一个quorum应答就可以了。
 
DSC0003.png
 
 
   Follower收到proposal后,写到磁盘(尽可能批处理),返回ACK。
   Leader收到大多数ACK后,广播COMMIT消息,自己也deliver该消息。
   Follower收到COMMIT之后,deliver该消息
 
   然而,这个简化的二阶段提交不能处理Leader失效的情况,所以增加了recovery模式。切换Leader时,需要解决下面两个问题。
 
Never forget delivered messages
   Leader在COMMIT投递到任何一台follower之前宕机,只有它自己commit了。新Leader必须保证这个事务也必须commit。
 
Let go of messages that are skipped
   Leader产生某个proposal,但是在宕机之前,没有follower看到这个proposal。该server恢复时,必须丢弃这个proposal。
 
   新Leader在propose新消息之前,必须保证事务日志中的所有消息都proposed并且committed。
    为了保证follower看到有proposal,以及递交的消息,Leader向follower发送follower没有见过的PROPOSAL,以及最后提交的消息的编号之前的COMMIT。
 
   因为Proposal是保存在follower的事务日志中,并且顺序有保证,因此COMMIT的顺序也是确定的。解决的第一个问题。
 
   上个没有把proposal发送出去的Leader重启后,新Leader将告诉它截断事务日志,一直截断到follower的epoch对应的最后一个commit位置。
 
 
   关于ZAB的详细证明可以参考Zab - High-performance broadcast for primary-backup systems

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366009-1-1.html 上篇帖子: ZooKeeper集群配置应用 下篇帖子: 神级 zookeeper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表