Cassandranodetool
有一个命令叫做cleanup
:
清理 [keyspace][cf_name]
触发立即清理不再属于此节点的键。这对节点的影响与主要压缩在磁盘空间使用量的临时增加和磁盘 I/O 的增加方面大致相同。(可选)采用列族名称列表。
我的问题是:
- 一个节点什么时候会拥有不属于它的键?
- 我应该什么时候进行清理?
- 我是否应该定期进行清理(例如每周一次)?
Cassandranodetool
有一个命令叫做cleanup
:
清理 [keyspace][cf_name]
触发立即清理不再属于此节点的键。这对节点的影响与主要压缩在磁盘空间使用量的临时增加和磁盘 I/O 的增加方面大致相同。(可选)采用列族名称列表。
我的问题是:
一个节点什么时候会拥有不属于它的键?
当您向集群添加新节点时,会降低复制因子或移动令牌。
我应该什么时候进行清理?
经过以上操作之一,如果需要节省磁盘空间。延迟运行它并没有什么害处 - 会影响性能,唯一的原因是节省磁盘空间。
我是否应该定期进行清理(例如每周一次)?
不,仅当您需要在上述操作之一后节省空间时。
一个节点什么时候会拥有不属于它的键?
当您引导一个新节点时,一些现有节点将通过将所有权转移到新节点而失去对数据的所有权。
减少复制因子也可以做到这一点。
我应该什么时候进行清理?
在下面提到的操作之后,但在您开始任何其他拓扑/复制更改之前。
您应该在集群中所有受影响的节点上运行它。如有疑问,请在所有节点上运行。
运行它的一个原因是回收用于存储不再拥有的数据的磁盘空间。
Another reason is that failure to do so may cause data consistency problems. You may see resurrection of deleted data. Consider the case of node A losing ownership of key k
after bootstrapping a new node, and holding a live row for key k
. Later, key k is deleted but deletion does not propagate to node A (no longer a replica). Then the deletion expires in the whole cluster. Then you change the topology such that A is the owner of key k
again. It will serve the old, deleted, row.
Source: https://docs.datastax.com/en/dse/6.7/dse-admin/datastax_enterprise/tools/nodetool/toolsCleanup.html
No need to run nodetool cleanup
after nodetoool decommission
, nodetool replace
, or nodetool removenode
.
Should I do cleanup regularly (e.g. once per week)?
No need to.