Vasilis_Dimitrakopoulos Asked: 2022-08-26 01:59:49 +0800 CST2022-08-26 01:59:49 +0800 CST 2022-08-26 01:59:49 +0800 CST 有人可以简单地解释一下 Cassandra nodetool 命令,例如紧凑和清理吗? 772 大家好 我是数据库新手,我正在尝试理解一些 Cassandra 命令。我想知道以下命令: 节点工具紧凑 节点工具清理 节点工具修复 节点工具垃圾收集 我将不胜感激一些简单而清晰的答案,例如 -> nodetool help :它显示了所有命令及其用法。 我要解决的问题是,在我删除(大量数据)之后,存储空间仍然是满的。我将 gc_grace_seconds 更改为 1 天,但仍然没有。因此,如果我现在需要手动清除空间,我应该运行哪些命令以及以什么顺序运行? 谢谢你的时间 delete cassandra 1 个回答 Voted Best Answer Erick Ramirez 2022-08-26T03:02:05+08:002022-08-26T03:02:05+08:00 这是我试图解释每个命令的作用。 nodetool compact 一种指示 Cassandra 合并/重写 SSTables 同时驱逐过期(墓碑)数据的手动方式。当墓碑超过表上配置的 GC 宽限时,它们将被视为过期。 请注意,不建议运行此命令。我已经在这篇文章中解释了原因——为什么在表上强制进行主要压缩并不理想?. nodetool cleanup 删除其键不再由节点拥有的分区(记录),因为它拥有的令牌范围在另一个节点添加到集群后发生了变化。 例如,假设节点 A 拥有令牌范围 0-100。节点 B 已添加到集群中,其令牌范围为 80-200。因此,节点 A 不再拥有令牌范围 80-100 中的数据(现在只拥有令牌范围 0-79 中的数据)。您将cleanup在此节点上运行以摆脱 80-100 范围内的数据以回收磁盘空间。 nodetool repair Cassandra 有一个分布式架构,其中没有任何东西是共享的,甚至存储层也没有。集群中的每个节点都是一个独立的实例。 由于这种分布式特性,节点(副本)上的数据副本可能会不同步。修复是 Cassandra 修复(修复)不一致性的机制。该功能类似于rsync文件系统的工作方式。 nodetool garbagecollect 此命令触发对 SSTable 的压缩以删除“可删除”已删除(单元格/行/分区)数据。 此命令非常新,因此在某些情况下它不会驱逐已删除的数据。“可删除”的概念非常复杂,特别是因为分区的一部分(即列、行)可以跨多个 SSTable 分段,因此确定是否可以删除已删除的数据并不是一件容易的事。 现在对于您的问题,您需要注意设置gc_grace_seconds太低是危险的,因为如果您遇到其中一个节点遇到硬件故障的情况(例如),您需要能够在 GC 宽限内替换该节点。否则,您不能将该节点放回集群中,因为墓碑已经过期。如果您尝试将故障节点放回原处,则其他节点不再具有墓碑(它们已被 GCd),因此故障节点上已删除的数据将重新恢复到您的集群中。 在第一种情况下,您可以尝试nodetool garbagecollect在有问题的表上运行以尝试回收空间。如果这不起作用(由于我上面描述的原因),那么您可以尝试nodetool compact但要注意我在上面的帖子中解释的后果。干杯!
这是我试图解释每个命令的作用。
nodetool compact
一种指示 Cassandra 合并/重写 SSTables 同时驱逐过期(墓碑)数据的手动方式。当墓碑超过表上配置的 GC 宽限时,它们将被视为过期。
请注意,不建议运行此命令。我已经在这篇文章中解释了原因——为什么在表上强制进行主要压缩并不理想?.
nodetool cleanup
删除其键不再由节点拥有的分区(记录),因为它拥有的令牌范围在另一个节点添加到集群后发生了变化。
例如,假设节点 A 拥有令牌范围 0-100。节点 B 已添加到集群中,其令牌范围为 80-200。因此,节点 A 不再拥有令牌范围 80-100 中的数据(现在只拥有令牌范围 0-79 中的数据)。您将
cleanup
在此节点上运行以摆脱 80-100 范围内的数据以回收磁盘空间。nodetool repair
Cassandra 有一个分布式架构,其中没有任何东西是共享的,甚至存储层也没有。集群中的每个节点都是一个独立的实例。
由于这种分布式特性,节点(副本)上的数据副本可能会不同步。修复是 Cassandra 修复(修复)不一致性的机制。该功能类似于
rsync
文件系统的工作方式。nodetool garbagecollect
此命令触发对 SSTable 的压缩以删除“可删除”已删除(单元格/行/分区)数据。
此命令非常新,因此在某些情况下它不会驱逐已删除的数据。“可删除”的概念非常复杂,特别是因为分区的一部分(即列、行)可以跨多个 SSTable 分段,因此确定是否可以删除已删除的数据并不是一件容易的事。
现在对于您的问题,您需要注意设置
gc_grace_seconds
太低是危险的,因为如果您遇到其中一个节点遇到硬件故障的情况(例如),您需要能够在 GC 宽限内替换该节点。否则,您不能将该节点放回集群中,因为墓碑已经过期。如果您尝试将故障节点放回原处,则其他节点不再具有墓碑(它们已被 GCd),因此故障节点上已删除的数据将重新恢复到您的集群中。在第一种情况下,您可以尝试
nodetool garbagecollect
在有问题的表上运行以尝试回收空间。如果这不起作用(由于我上面描述的原因),那么您可以尝试nodetool compact
但要注意我在上面的帖子中解释的后果。干杯!