【问题标题】:Cancelling ongoing compaction jobs in Cassandra取消 Cassandra 中正在进行的压缩作业
【发布时间】:2018-01-07 05:05:17
【问题描述】:

我有 3 节点集群。 3 个节点中有 2 个显示 100% 的 CPU 使用率。

似乎我们在更改一致性级别后没有调用repaircleanup(或者我们调用它太晚了或者它没有完成)

现在我们有 10 万个以上的压缩任务待处理。他们吃掉 100% 的 CPU。

我试过了

nodetool stop -- COMPACTION
nodetool stop -- INDEX_BUILD
nodetool stop -- VALIDATION
nodetool stop -- CLEANUP
nodetool stop -- SCRUB

没有变化。也没有错误。

我收到的唯一消息是

No files to compact for user defined compaction 

什么问题?我怎样才能取消正在进行的工作?

【问题讨论】:

    标签: cassandra cassandra-2.1


    【解决方案1】:

    调用nodetool stop COMPACTION 将停止当前的压缩。如果您不希望它开始新的压缩,请使用nodetool disableautocompaction。然后可以通过nodetool compactionstats进行验证

    我确信这不是你的问题。如果有 100k 的待定压缩,您将拥有太多的 sstable。你的节点无可救药地落后了。任何读取都会导致大量负载。此外,除非你有一个巨大的堆,否则仅仅试图从它们中读取可能会导致你在堆空间和 GC 问题上运行不足。 GC 可能是您的高负载的原因,如果您检查您的 CPU 时间,如果它花费在 IO 上,它可能来自读取或流式传输,如果它在 sys/usr 中,它可能是 GC。如果是 GC 问题,您可以进行堆转储并检查以验证占用所有空间的内容。

    如果您的节点落后 100k,您的节点可能永远无法自行恢复。您最好的选择可能是以下之一:

    • Replace 甚至让它自己替换。
    • 使用nodetool disablebinary/disablethrift/disablegossip 将其从集群中删除,然后使用nodetool compact 强制压缩所有sstables。根据版本和压缩策略,它可能无法正常工作,但您可以使用 jmx 在本地将该节点的压缩策略更改为 STCS 以使其工作。如果这不能在提示的切换窗口中完成,那么尝试再次使您的集群保持一致是不值得的。此外,这仅在从集群中删除节点时负载下降时才有效。
    • 设置监控和警报,再也不要让它落后那么远。定位不到 100 个待处理的压缩。

    【讨论】:

    • 问题是,它甚至没有停止当前挂起/正在运行的任务。 (它也会停止挂起吗?)
    • 待定是对到达“正确”状态需要多少任务的估计。取消正在进行的任务不会改变这一点。 nodetool stop 将取消当前运行(如果可以),并且 disableautocompaction 将阻止它自动启动下一个。再一次,压实不是问题,问题是你远远落后。
    猜你喜欢
    • 2012-04-30
    • 2022-11-04
    • 1970-01-01
    • 2021-12-28
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多