【问题标题】:What to do if node repair wasn't ran within GCGraceSeconds?如果 GCGraceSeconds 中没有运行节点修复怎么办?
【发布时间】:2016-09-02 21:16:22
【问题描述】:

我认为我的任何节点都没有长时间停机,因此我认为我的所有删除操作都应该在所有节点中复制。但是,我一直将建议视为在 GCGraceSeconds 中运行节点修复的正常维护。我不相信我的集群上曾经运行过节点修复(几个月前我继承了它)。我有什么需要担心的吗?即使我长时间没有任何节点宕机,如果我运行节点修复也会有僵尸数据吗?

我的主要问题是 - 我该怎么做才能摆脱这种状态,以便我可以开始定期运行 nodetool repair?

【问题讨论】:

    标签: cassandra datastax


    【解决方案1】:

    Cassandra 没有关系数据库那样的“正常”删除。当您删除某些内容时,Cassandra 只需添加一些将数据标记为已删除的记录,名为“墓碑”。即使您的所有墓碑都已正确复制,它们仍然存在于您的文件中,并且可能会影响性能,甚至使一些已删除的记录再次“活跃”。

    一般来说,您需要定期在集群的每个节点上运行“nodetool repair”。

    您可以在documentation 中查看详细信息。

    【讨论】:

    • 是的,我熟悉墓碑的工作原理。我想我需要改写我的问题来询问我该如何解决这个问题。我不知道如果我在当前状态下进行 nodetool 修复会有什么影响。
    • 如果我对文档的理解正确,那么在所有节点都启动之前你是安全的——但你不能永远保证这一点,对吧?并且 IIRC 有修复总是比没有修复更安全......
    • 所以在我的情况下,除了几次滚动重启之外,我的所有节点几乎一直都在运行,我应该可以安全地开始定期使用修复?
    • 简单:1. 没有维修 - 只有在所有节点都启动时才安全(滚动重启计数) 2. 有维修 - 在任何情况下都是安全的。不过,修复是一种负担,但通常对于您的数据完整性而言是必要的。
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多