最近,我在一个3节点集群的客户设置中遇到了一个问题,其中一个节点宕机了,12天后才重新上线。在我们的场景中,大多数表的默认gc_grace_seconds被设置为1天,并且有很多表。
当这个down节点启动时,来自该节点的陈旧数据被复制到其他节点,导致所有三个节点中的僵尸数据。
我能想到的一个解决方案是在使节点加入集群之前清理节点,然后运行修复,这可以防止僵尸数据的发生。有没有其他可能的解决方案来避免这个问题,我不需要清理节点。
如果一个节点宕机的时间超过了最短的gc_grace_seconds
,就不应该让它重新上线。
在GC宽限期设置为非常低的值的环境中,这是一个挑战。在这些情况下,过程是完全重新构建节点,就好像它从来不是集群的一部分:
- 完全擦除
data/
,commitlog/
和saved_caches/
的所有内容。 - 如果该节点被列为种子节点,则从其种子列表中删除该节点的IP。
- 使用
replace_address
标志将节点替换为自身
干杯!