题目:zookeeper同步流程
参考答案:
选完Leader以后,zk就进入状态同步过程。
-
Leader等待Follower和Observer连接;
-
Follower连接leader,将最大的zxid发送给leader;
-
Leader根据follower的zxid确定同步点;
-
完成同步后通知follower 已经成为uptodate状态;
-
Follower收到uptodate消息后,又可以重新接受client的请求进行服务了。
数据同步的4种方式:
1、SNAP-全量同步
- 条件:peerLastZxid<minCommittedLog
- 说明:证明二者数据差异太大,follower数据过于陈旧,leader发送快照SNAP指令给follower全量同步数据,即leader将所有数据全量同步到follower
2、DIFF-增量同步
- 条件:minCommittedLog<=peerLastZxid<=maxCommittedLog
- 说明:证明二者数据差异不大,follower上有一些leader上已经提交的提议proposal未同步,此时需要增量提交这些提议即可
3、TRUNC-仅回滚同步
- 条件:peerLastZxid>maxCommittedLog
- 说明:证明follower上有些提议proposal并未在leader上提交,follower需要回滚到zxid为maxCommittedLog对应的事务操作
4、TRUNC+DIFF-回滚+增量同步
- 条件:minCommittedLog<=peerLastZxid<=maxCommittedLog
- 说明:leader a已经将事务truncA提交到本地事务日志中,但没有成功发起proposal协议进行投票就宕机了;然后集群中剔除原leader a重新选举出新leader b,又提交了若干新的提议proposal,然后原leader a重新服务又加入到集群中说明:此时a,b都有一些对方未提交的事务,若b是leader, a需要先回滚truncA然后增量同步新leader b上的数据。
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/%E9%9D%A2%E8%AF%95/12.Zookeeper%E7%AF%87/12.2.6-zk%E5%90%8C%E6%AD%A5%E6%B5%81%E7%A8%8B/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com