【问题标题】:When should I run cleanup in Cassandra?我应该什么时候在 Cassandra 中运行清理?
【发布时间】:2013-08-18 05:20:55
【问题描述】:

Cassandra nodetool 有一个名为 cleanup 的命令:

清理 [keyspace][cf_name]

触发立即清理不再属于此的键 节点。这对主要节点的影响大致相同 压缩确实会暂时增加磁盘空间使用量 以及磁盘 I/O 的增加。可选地获取列族列表 名字。

我的问题是:

  1. 什么时候节点的键不属于它?
  2. 我应该什么时候进行清理?
  3. 我是否应该定期进行清理(例如每周一次)?

【问题讨论】:

    标签: cassandra database-administration nodetool


    【解决方案1】:

    一个节点什么时候会拥有不属于它的键?

    当您向集群添加新节点时,减少了复制因子或移动了令牌。

    我应该什么时候进行清理?

    以上操作之一后,如果需要节省磁盘空间。延迟运行它并没有什么坏处 - 会影响性能,唯一的原因是节省磁盘空间。

    我是否应该定期进行清理(例如每周一次)?

    不,仅当您需要在上述操作之一后节省空间时。

    【讨论】:

    • 所以简单地删除行或列不会使节点的键不属于它,对吗?
    • 正确。删除的项目(一旦墓碑过期)通过正常压缩而不是通过 nodetool 清理来删除。
    • 很好的答案。但是我怎么知道清理完成了?
    【解决方案2】:

    一个节点什么时候会拥有不属于它的键?

    当您引导一个新节点时,一些现有节点将通过将所有权转移给新节点而失去对数据的所有权。

    减少复制因子也可以做到这一点。

    我应该什么时候进行清理?

    在下面提到的操作之后,但在您开始任何其他拓扑/复制更改之前。

    您应该在集群中所有受影响的节点上运行它。如有疑问,请在所有节点上运行。

    运行它的一个原因是回收用于存储不再拥有的数据的磁盘空间。

    另一个原因是不这样​​做可能会导致数据一致性问题。您可能会看到已删除数据的复活。考虑节点 A 在引导一个新节点后失去对密钥 k 的所有权,并为密钥 k 保留一个活动行的情况。稍后,密钥 k 被删除,但删除不会传播到节点 A(不再是副本)。然后删除在整个集群中过期。然后更改拓扑,使 A 再次成为密钥 k 的所有者。它将为旧的、已删除的行提供服务。

    来源:https://docs.datastax.com/en/dse/6.7/dse-admin/datastax_enterprise/tools/nodetool/toolsCleanup.html

    无需在nodetoool decommissionnodetool replacenodetool removenode 之后运行nodetool cleanup

    我是否应该定期进行清理(例如每周一次)?

    不需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2014-05-07
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多