Cassandra 删除了仍在硬盘上的键空间

Cassandra dropped keyspaces still on HDD

我注意到我的 cassandra 集群上打开的文件数量有所增加,因此去检查它的运行状况。 Nodetool 状态报告每个已分配的 3TB 的每个节点仅使用 300gb。

不久之后,我开始在 cassandra 日志中看到 HEAP OOM 错误。

这些节点已经 运行 3-4 个月没有问题,但是填充了一系列测试数据然后从中删除。

通过 df 命令检查硬盘驱动器后,我能够确定它们在 jboded 场景中的填充率都在 90-100% 之间。

编辑:进一步调查显示剩余文件在 'snapshot' 子文件夹中,数据子文件夹本身没有数据库表。

我的问题是,有人看过这个吗?为什么压缩没有释放这些墓碑?这是一个错误吗?

快照不是逻辑删除 - 它们是您数据的备份。

正如 Highstead 所说,您可以通过 clearsnapshot 命令删除任何未使用的快照。

您可以通过 cassandra.yaml

禁用自动快照功能

https://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html#reference_ds_qfg_n1r_1k__auto_snapshot

还要检查 snapshot_before_compaction

是否有非默认值

快照发生在 cassandra 集群的生命周期内。这些快照未在 nodetool status 中捕获,但仍占用 space。在这种情况下,消耗所有 space 的快照是在删除 table 时创建的。

要检索当前快照列表,请使用命令 nodetool listsnapshots

可以通过编辑 /etc/cassandra/cassandra-env.sh 并将 auto_snapshot 设置为 false 来禁用此功能。或者,可以通过命令 nodetool clearsnapshot <name> 清除这些快照。