如果增加 Cassandra 集群中的节点数量,磁盘空间会增加吗?

use*_*631 2 cassandra cassandra-2.1

我在 Cassandra 集群(部署在 ec2 实例上)中遇到这样的情况:集群的每个节点中的磁盘空间都将耗尽。现在,如果我在 Cassandra 集群中添加更多实例,是否会增加磁盘空间?

我的意思是,每当我们空间不足时,我们可以向 cassandra 集群添加更多实例以增加总体磁盘空间吗?

如果是的话,这是正确的做法吗?

Aar*_*ron 5

我的意思是,每当我们空间不足时,我们可以向 cassandra 集群添加更多实例以增加总体磁盘空间吗?

是的,是的。

考虑一个 4 节点集群,复制因子 (RF) 为 3,每个节点有 100GB 存储。假设初始完整副本的数据占用空间为 60GB。如果有 4 个节点,RF 为 3,则每个节点将负责 3/4 的数据,即 45GiB。

Address      Load      Owns      Total
10.0.0.1     45.0 GiB  75.0%     100Gb
10.0.0.2     45.0 GiB  75.0%     100Gb
10.0.0.3     45.0 GiB  75.0%     100Gb
10.0.0.4     45.0 GiB  75.0%     100Gb
Run Code Online (Sandbox Code Playgroud)

通过大小分层压缩(默认),您希望将每个节点的磁盘使用量控制在总磁盘使用量的 50% 以下。这个设置允许这样做。

然而,假设应用程序团队在一夜之间运行很大的负载。我们明天早上来,发现这个:

Address      Load      Owns      Total
10.0.0.1     70.0 GiB  75.0%     100Gb
10.0.0.2     70.0 GiB  75.0%     100Gb
10.0.0.3     70.0 GiB  75.0%     100Gb
10.0.0.4     70.0 GiB  75.0%     100Gb
Run Code Online (Sandbox Code Playgroud)

实质上,完整的数据副本已增长至 93.3 GiB。为了将每个磁盘的数据量降至 50% 以下,我们必须添加更多节点。

但有多少呢?

如果我们添加一个节点(保持 RF 为 3),这意味着每个节点负责 3/5(60% 的数据),即 55.98 GiB。接近,但还没有完全实现。

如果我们添加两个节点,则总共有 6 个节点,这意味着每个节点负责 50% 的数据,即 46.65 GiB。这确实使每个节点的利用率回到了 %50 以下,因此我们应该添加至少两个节点。

执行此操作后,集群应如下所示:

Address      Load       Owns      Total
10.0.0.1     46.65 GiB  50.0%     100Gb
10.0.0.2     46.65 GiB  50.0%     100Gb
10.0.0.3     46.65 GiB  50.0%     100Gb
10.0.0.4     46.65 GiB  50.0%     100Gb
10.0.0.5     46.65 GiB  50.0%     100Gb
10.0.0.6     46.65 GiB  50.0%     100Gb
Run Code Online (Sandbox Code Playgroud)

请注意,简单地在新节点中引导只会将数据移动到这些节点。它不会其从现有节点中删除。为此,您应该nodetool cleanup在每个预先存在的节点上运行 a。