Cassandra 紧凑、修复和清理的区别

11

在发布了问题并阅读了这篇文章那篇文章之后,我仍然不明白以下三个操作之间的关系-

  • Cassandra压缩任务
  • nodetool修复
  • nodetool清理

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

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

1个回答

21

cleanup 是一种仅移除节点标记范围之外内容的压缩操作。而 repair 带有 “验证压缩” ,用于构建默克尔树以与其他节点进行比较,因此 nodetool repair 的部分将进行压缩。

当正在运行压缩任务时,是否可以同时执行修复任务或清理任务?

在普通压缩、修复、清理和扫描等操作之间,存在一个共享池用于进行压缩。这是设置在 cassandra.yaml 中的 concurrent_compactors ,默认情况下是核心数和数据目录的组合:https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L572

是否需要像修复一样每周执行 cleanup 操作?

不需要,只有在拓扑结构发生变化后才真正需要执行。

为什么修复操作需要手动执行并且不是Cassandra的默认行为?

它是手动执行的,因为它的要求在数据和 gc_grace 需求上可能有很大差异。然而 https://issues.apache.org/jira/browse/CASSANDRA-10070 正在将它纳入 Cassandra 中,因此在未来将会自动执行。

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

我想(个人意见):

  • 定期备份 (根据需求和可接受的数据丢失情况,可以是每周/每日或连续增量)。
    • 这不仅用于“内部”错误(“哎呀,我删除了一个客户”的情况),也用于故障。即使具有强大的多数据中心复制,您也需要一些最低限度的备份。
  • 确保对所有在gc_grace时间内至少进行过一次删除的表完成修复。
  • 如果您想要能够调试问题,度量和日志存储非常重要。

很好的总结!谢谢。 - user2552806
1
在将节点添加到集群后,执行清理而不进行修复是否安全? - Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接