数据如何在cassandra集群上保持一致

时间:2014-02-13 07:15:21

标签: cassandra datastax-enterprise datastax cassandra-2.0

当我阅读有关cassandra写入一致性的数据文档时,我有一个疑问。我有一个关于cassandra如何在以下场景中保持一致状态的问题:

  • 写一致性级别= Quorum
  • 复制因子= 3

根据文档,当发生写入时,协调器节点会将此写入请求发送到群集中的所有副本。如果一个副本成功而其他副本失败,则协调器节点将向客户端发送错误响应,但节点1成功写入数据并且不会回滚。

在这种情况下,

读取修复(或提示切换或nodetool修复)是否会将不一致的数据从node-1复制到node-2和node-3?

如果没有,cassandra将如何处理不将不一致的数据复制到其他副本?

你能否澄清一下我的问题

3 个答案:

答案 0 :(得分:2)

您完全正确,读取修复或其他方法将更新node-2和node-3。 这意味着即使失败的写入最终也会更新其他节点(如果至少有一个成功)。 Cassandra没有像关系数据库那样的回滚。

答案 1 :(得分:0)

我没有看到任何错误 - 系统执行你所说的,即两个覆盖一个,并且由于错误消息被发送回客户端,因为"失败"然后最终的地位应该是"失败"通过阅读修复工具。

答案 2 :(得分:0)

Cassandra Coordinator节点在其存储中维护失败的副本数据,它将定期重试(3次左右),如果成功,则会发送最新数据,否则会截断其存储中的数据。

如果有任何读取查询,Coordinator节点会向所有副本节点发送请求,并将比较所有副本节点的结果。如果其中一个副本节点未发送最新数据,则它将向该节点发送读取修复命令,以使节点保持同步。