在Cassandra中,何时应运行清理操作?

4

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

cleanup [keyspace][cf_name]

立即清理不再属于该节点的键。这对节点的影响与主要压缩相似,会导致磁盘空间使用和磁盘I / O的临时增加。可选地接受一组列族名称。

我的问题是:

  1. 何时会出现拥有不属于它的键的节点?
  2. 何时应执行清理操作?
  3. 是否应定期执行清理操作(例如每周一次)?
2个回答

7

一个节点在什么情况下会拥有不属于它的键?

当您向集群添加新节点、减少复制因子或移动标记时。

我应该在什么时候执行清理操作?

在执行上述操作之后,如果需要节省磁盘空间。可以延迟运行清理操作,但会对性能产生影响,唯一的原因是为了节省磁盘空间。

我应该定期执行清理操作吗(例如每周一次)?

不需要,只有在执行上述操作后需要节省空间时才需要运行清理操作。


那么简单地删除行或列不会使一个节点拥有不属于它的键,对吗? - keelar
1
正确。删除的项目将通过正常压缩而非nodetool清理来移除(一旦墓碑已过期)。 - Richard
很好的回答。但是我怎么知道清理工作已经完成了呢? - Aftab

0
何时会出现拥有不属于它的键的节点?
当引导新节点时,一些现有节点将通过将所有权转移给新节点而失去数据所有权。 减少复制因子也会导致这种情况发生。
什么时候应该发出清理命令?
在下面提到的操作之后,但在开始任何其他拓扑/复制更改之前。
您应该在群集中的所有受影响节点上运行它。 如果有疑问,请在所有节点上运行。
运行这个命令的一个原因是为了回收用于存储不再拥有的数据的磁盘空间。
另一个原因是未进行清理可能会导致数据一致性问题。 您可能会看到已删除数据的恢复。 考虑节点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

我需要定期运行cleanup吗(例如每周一次)?

不需要。


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