如何处理磁盘上 Cassandra 中的空目录?

Posted

技术标签:

【中文标题】如何处理磁盘上 Cassandra 中的空目录?【英文标题】:What to do with empty directories from Cassandra on disk? 【发布时间】:2020-03-27 07:29:01 【问题描述】:

我有 Cassandra 3.11.4 并且已经运行了一段时间的测试环境。我已经完成了 nodetool 清理、清除快照、修复、压缩等工作,而我的密钥空间的数据存储目录中剩余的内容包含许多“空”目录。

从目录运行du时:

0       ./a/backups
47804   ./a
0       ./b/backups
0       ./b
0       ./c/backups
0       ./c
0       ./d/backups
0       ./d
7748832 .

只是将名称重命名为通用字母的一部分数据,但基本上还有许多这样的空目录。然而,引用的表要么已经在很久以前被删除,即比 gc_grace_seconds 长,但目录链接仍然存在?这些不是快照,因为制作快照并使用 nodetool clearsnapshot 清除它可以正常工作。

在我手动删除每个空文件夹之前,这会很痛苦,因为它们有很多;我是否错过了维护集群的步骤,这会导致这种情况,还是如果我的测试架构发生许多变化,它是否会发生并且必须定期处理?

快照被清除,/backups 尾随意味着这些是增量备份?

https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsBackupIncremental.html

即使是这样,也没有任何方法可以删除这些增量备份,我至少可以使用 nodetool 找到这些增量备份,至少 cassandra.yaml 中的 incremental_backups 设置为 False。

我相信有答案表明删除这些“幽灵”目录是安全的,但如果密钥空间中有很多这样的目录,那就太烦人了。另外,也许这只是我想要干净目录的想法,这些“幽灵”目录会对性能产生影响吗?

【问题讨论】:

【参考方案1】:

所以“ghost”表目录来自: 1) 空表 - 仍然是有效表,但没有插入任何数据 2) 截断表 3) 删除表

在第一种和第二种情况下,如果您删除目录,最终可能会导致问题。如果您想验证该目录是否正在用于该表,您可以查询:

select id from system_schema.tables 
where keyspac_name = 'xxxx' and
      table_name = 'yyyy';

该 ID 是用于该表的目录扩展名的 ID。该键空间的该表的该目录的任何其他匹配项均未使用。

-吉姆

【讨论】:

表的名称应该始终附加 UUID,因此即使您删除表并重新创建,它也不会与以前的版本冲突 那么这是 cassandra 在正常运行中的预期行为吗? 是的。你看到的很正常。您只需要稍微注意原因(如上所述),以免吹走空目录,例如空表。不知道如果你这样做会发生什么。没试过。也许我会在实验室试一试。 @JimWartnick 谢谢。接受你的回答。我很清楚哪些文件夹不再使用。但是在集群的每个节点上进行清理是很痛苦的。无论如何感谢您的解释。

以上是关于如何处理磁盘上 Cassandra 中的空目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Cassandra 丢失的连接?

如何处理来自存储在vue中的空数据

python中的all()如何处理空列表

如何处理 JSONDecoder 中的空日期字符串

如何处理参数化查询中的空用户输入?

如何处理 DRF 中的空索引列表?