【发布时间】:2021-01-29 00:30:58
【问题描述】:
我有一个 20 节点的 scylla 数据库集群,每个节点的磁盘空间使用率为 70%。我想从大小分层策略切换到分层压缩策略。我可以在剩下这么多磁盘空间的情况下做到这一点吗?最多需要多少磁盘空间?
【问题讨论】:
我有一个 20 节点的 scylla 数据库集群,每个节点的磁盘空间使用率为 70%。我想从大小分层策略切换到分层压缩策略。我可以在剩下这么多磁盘空间的情况下做到这一点吗?最多需要多少磁盘空间?
【问题讨论】:
通常使用 Size Tiered Compaction Strategy 或 Leveled Compaction Strategy,您希望保留大约 50% 的可用磁盘空间。
我们有一个 Scylla Enterprise 功能 Incremental Compaction Strategy,它更适合在 70% 的磁盘利用率下舒适地运行。
更改压缩策略并重写所有当前表将需要两倍于您当前使用的磁盘空间。 (目前使用率的 140%。)所以看起来您可能需要临时扩展集群才能正确运行压缩。
据我了解,这首先需要时间来均匀地重新平衡节点。然后你应该使用你现有的策略运行一个完整的压缩,并改变你的新策略。然后,如果您通过压缩节省了空间,则可以停用任何不需要的节点。
如果您有更具体的问题,我会邀请您到 join our Slack 直接询问我们的社区成员。
【讨论】:
如前所述,您没有足够的磁盘空间来切换压缩策略。我可以想到 2 种或可能 3 种解决此问题的方法。
nodetool cleanup 以回收未使用的空间。【讨论】:
nodetool cleanup,因为它还需要大量磁盘空间(我认为它也可以进行压缩)。唯一有效的是清理节点上的数据目录(/var/lib/scylla/data/keyspace/table_uuid/*),然后执行nodetool rebuild。这会从其他节点流式传输数据,并且还摆脱了我们很久以前创建但没有以某种方式发布的 tombone。我本可以做到nodetool repair,但在我的情况下它慢了 2 倍。