避免 cassandra 中的僵尸数据

Vis*_*hal 3 cassandra tombstone

最近,我在客户设置 3 节点集群时遇到了一个问题,其中一个节点出现故障,并在 12 天后才上线。在我们的场景中,大多数表的默认 gc_grace_seconds 已设置为 1 天,并且有很多表。

当此故障节点出现时,来自该节点的陈旧数据被复制到其他节点,导致所有三个节点中出现僵尸数据。

我能想到的一个解决方案是在加入集群之前清理节点,然后运行修复,这可以防止僵尸数据的出现。是否有任何其他可能的解决方案可以避免此问题,而我不需要清理节点。

Eri*_*rez 5

如果节点的关闭时间超过最短时间,则永远不应该将其恢复在线状态gc_grace_seconds

这在 GC 宽限设置为非常低的值的环境中是一个挑战。在这些情况下,过程是完全重建节点,就好像它从来不是集群的一部分一样:

  1. data/彻底擦除、commitlog/和的所有内容saved_caches/
  2. 如果该节点被列为种子节点,则从其种子列表中删除该节点的 IP。
  3. 使用标志将节点替换为其自身replace_address

干杯!