zookeeper 保证数据一致性的问题
(1)执行过半写成功并commit的数据 ,集群内部会保证所有机器都执行了这个事务,同时zk客户端收到 操作成功的提示。这个是一致性状态,包括集群内部一致性, 客户端响应结果与集群内部状态一致。
(2)如果leader执行过半写 但在commit之前 宕机了,那么会选举新的leader,此时选举之后进行数据同步,这个尚未commit的事务最终也会在集群内部达到一致性,但是对于客户端来说 这个操作执行失败了。
此时不就出现问题了吗?比如客户端创建一个节点,集群内部显式节点创建成功,但是客户端却收到节点创建失败的结果
(3)如果leader 在将事务A的提案发送给FollowA后宕机了,集群中其他follow节点没有收到事务A的提案,经过leader选举和数据同步之后,事务A的提案应该 会在集群中所有节点都执行并提交(这个理解应该没什么问题吧?),但是此时客户端收到了操作失败的响应结果,而集群内部却显式事务执行成功并提交。 这不就出现不一致了吗?
问题:zk如何解决2和3中出现的问题的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Zab 原子广播协议,类似两阶段提交。
对于2,如果leader执行commit,客户端也收到成功。如果尚未commit,集群各个节点不会接收到proposal的commit同步,leader宕机,客户端收到失败。
对于3,如果leader 在将事务A的提案发送给FollowA后宕机了,集群中其他follow节点没有收到事务A的提案,此提案并不会生效。即使触发选举,也不会生效。