【问题标题】:How to rebalance and reclaim disk space after adding a Cassandra node添加 Cassandra 节点后如何重新平衡和回收磁盘空间
【发布时间】:2023-03-17 10:18:02
【问题描述】:

我有一个 12 节点的 cassandra 集群,它的数据负载很高,磁盘空间几乎接近满容量。我通过添加 1 个节点并计划添加更多节点来扩展集群。 我发现添加新节点后数据负载减少了。但是,磁盘空间并没有减少。 我担心运行 nodetool repair 因为这可能需要额外的磁盘空间并且可用空间可能不够。 有建议使用nodetool cleanup,看起来这也会导致磁盘空间临时增加。 https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/tools/toolsCleanup.html

请建议是否有更好的方法来清理其他节点的旧数据以回收磁盘空间

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    不幸的是,nodetool cleanup 是您在将节点添加到集群以回收磁盘空间后驱逐节点不再拥有的数据的唯一方法。

    为了让cleanup 工作,它暂时使用更多空间,因为它需要将 SSTable 重新压缩为新的。如果您的 SSTable 非常大,大小为几 GB,并且没有太多剩余磁盘空间,这可能会出现问题。

    您可以通过使用sstablesplit 工具将配置为SizeTieredCompactionStrategy 的大型SSTable 拆分为另一台服务器上的较小文件来解决此问题。我已经在https://community.datastax.com/questions/6415/ 中记录了说明。干杯!

    【讨论】:

    • 在尝试执行 sstablesplit 命令时出现以下错误。我从一个 docker 容器运行这个 - “WARN 06:13:26 Only 33.570GiB free across all data volumes.考虑为您的集群增加更多容量或删除过时的快照跳过非 sstable 文件 /opt/cassandra”没有有效的 sstables 要拆分
    • Cassandra 版本为 3.9
    • 这是一个错误。这是一个警告 (WARN)。您需要磁盘空间才能重新压缩文件。例如,如果您要拆分一个 100GB 的文件,那么您至少需要 100GB(最好是 110GB),因为它需要空间来写入新文件。干杯!
    • 增加磁盘空间后,警告消失了。但它仍然无法识别 sstable
    • /usr/bin/sstablesplit --debug --no-snapshot /opt/cassandra 跳过非 sstable 文件 /opt/cassandra 没有要拆分的有效 sstables /usr/bin/sstablesplit --debug -- no-snapshot /opt/cassandra/mc-3264-big-Index.db 线程“main”中的异常 java.lang.AssertionError: Unknown keyspace opt at org.apache.cassandra.db.Keyspace.(Keyspace.java :309) 在 org.apache.cassandra.db.Keyspace.openWithoutSSTables(Keyspace.java:110) 在 org.apache.cassandra.tools 的 org.apache.cassandra.db.Keyspace.open(Keyspace.java:127)。 StandaloneSplitter.main(StandaloneSplitter.java:114)
    猜你喜欢
    • 2013-04-26
    • 2014-07-04
    • 1970-01-01
    • 2014-05-31
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多