【问题标题】:How to properly cleanup Cassandra after stress testing?压力测试后如何正确清理 Cassandra?
【发布时间】:2021-04-26 03:43:46
【问题描述】:

我的任务是站起来准备我们的生产 Cassandra 集群 (3.11.1)。一切都很好,用压力测试工具加载了几亿条记录,太棒了。然而,在我完成后,我做了一个“DROP KEYSPACE keyspace1;” (压力测试使用的空间)假设这就像 MySQL 并且空间将被清理。

现在我已经运行了 nodetools cleanup、flush、truncatehints、cleansnapshots 以及我能找到的几乎所有其他命令变体。每个节点的磁盘使用量仍然约为 30GB,Cassandra 中似乎没有发生任何事情。

所以#1 - 我如何恢复被现在删除的键空间吸收的磁盘空间?

还有 #2 - 如果这是“错误的方式”,我应该如何删除这些数据?

【问题讨论】:

  • auto_snapshot (Default: true) Enables or disables whether Cassandra takes a snapshot of the data before truncating a keyspace or dropping a table. To prevent data loss, Datastax strongly advises using the default setting. If you set auto_snapshot to false, you lose data on truncation or drop.the docs

标签: cassandra cassandra-3.0


【解决方案1】:

删除键空间后,您可以在数据目录中删除它的目录。哪个会清理它,没有命令可以做到这一点。

【讨论】:

  • 因此,如果我删除了分布在多个硬盘上的数十台服务器的密钥空间...我需要rm 数百个文件?那么清理/压缩过程甚至会做什么?
  • rm 每个节点 1 个目录是的,删除键空间和表永远不会真正删除数据,这就是截断。 cleanup 将重写 sstables,过滤掉任何不属于其令牌范围的数据。它用于在将节点添加到集群后,该节点曾经拥有的数据仍在磁盘上 - 清理将其清除。
【解决方案2】:

就像@Chris 说的,我们可以手动删除数据。另外补充一下他所说的,在指定的gc_grace_seconds 过去之前,删除数据确实不是真正的数据。默认为 864000 秒。

我们实际上可以通过在 cqlsh 中运行来修改它:

ALTER TABLE keyspace.table WITH gc_grace_seconds = 5;

然后再次检查:

SELECT table_name,gc_grace_seconds FROM system_schema.tables WHERE keyspace_name='transcript';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多