首页 > 解决方案 > 事务之间节点死亡/离线时的 Cassandra 一致性问题

问题描述

我有一个场景

假设我们在一个集群中有 6 个节点,复制因子为 3。现在我们正在使用 quorum 进行编写,所以假设协调器看到有 3 个节点在数据需要去的地方,但是当它将数据发送到 3 个节点 n1 时, n2,n3。n1 和 n2 停止工作,因此写入操作将失败,因为 quorum 未满足,但 n3 将具有此失败 upsert 的数据,因为 cassandra 没有回滚。

在此之后 n1 和 n2 出现但具有较旧的数据。

现在如果读取完成,在读取修复中,n3 上存在的最新数据(失败的 upsert)将被复制到 n1 和 n2 我的理解是否正确?

标签: cassandra

解决方案


是的,你是对的。

如果针对该记录运行读取修复,则将从 n3 复制数据。这将取决于您的配置read_repair_chance以及查询记录的频率。

如果不经常查询记录,则不太可能运行读取修复,您将不得不等待修复运行。

如果你没有nodetool repair按时跑步,你应该开始这样做!

请注意,如果您QOURUM在修复之前保持一致性阅读,您仍将获得旧值。


推荐阅读