如果我们删除了一致性级别为 QUORUM 的行,并且所有读取都使用相同的一致性级别,那么删除的记录如何再次出现。
例如,在 RF=3 且一致性级别 = QUORUM 的 3 节点集群中。
我删除了一行具有一致性QUORUM的行,并且当时有一个节点发生故障。因此失败的节点无法 catch 此删除。
让 Cassandra 在完全压缩时删除每个节点中的行。从这两个节点删除行后,认为故障节点变为事件节点。
由于我们的一致性级别是 QUORUM,我们将从任何副本节点之一获得零结果,并且协调器可以假设该行已被删除并向客户端返回 null。
我的疑问是为什么 cassandra 会等待 gc_grace_seconds 来执行从节点中完全删除行的操作。
最佳答案
因为如果故障节点在其他2个节点的数据完全删除后恢复,集群将不知道数据是否已被删除,而该节点已宕机,或者数据已插入,但只是失败了由于其他原因被复制到其他 2 个节点,例如,因为这 2 个节点在写入期间处于运行状态,但随后崩溃并被替换。
换句话说,宽限期提供了足够的时间让所有节点在任何这些情况下同步所有数据。这也是为什么集群需要定期在这个宽限期内完成本轮修复的原因
关于Cassandra删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28186084/