Cassandra 压实 vs 修复 vs 清理

Cassandra Compaction vs Repair vs Cleanup

发了question and reading this and that篇文章,还是不明白这三个操作的关系-

是否可以在压缩任务运行时处理修复任务,或者在压缩任务运行时进行清理?清理是一项需要每周执行的操作作为修复吗?为什么修复操作需要手动执行,而这不是 Cassandra 的默认行为?

健康集群维护的基本规则是什么?

A cleanup 是一种压缩,它只删除节点标记范围之外的东西。一个repair有一个"Validation Compaction"来构建一个merkle树来与其他节点进行比较,所以nodetool repair的一部分会进行压缩。

Is repair task can be processed while compaction task is running, or cleanup while compaction task is running?

在正常压缩、修复、清理、擦洗等之间有一个压缩共享池。这是 cassandra.yaml 中的 concurrent_compactors 设置,默认为核心和数据目录:https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L572

Is cleanup is a operation that need to be executed weekly as repair?

不,只有在拓扑真正改变之后。

Why repair operation need to be executed manually and it is not in Cassandra default behavior?

它的手册,因为它的要求在您的数据和 gc_grace 要求方面可能有很大差异。 https://issues.apache.org/jira/browse/CASSANDRA-10070 正在将它带入 Cassandra,所以将来它将是自动的。

What is the ground rules for healthy cluster maintenance?

我会(意见)说:

  • 定期备份(取决于要求和可接受的数据丢失 这可以是从 weekly/daily 到不断增加的任何值)。
    • 这与 "internal" 错误 ("Opps i deleted a customer") 和中断一样多。即使使用强大的多 dc 复制,您也需要一些最少的备份。
  • 确保在这些表的 gc_grace 时间内至少完成一次删除的所有表的修复。
  • 如果您希望能够调试问题,指标和日志存储非常重要。