如果我增加Cassandra Cluster中的节点数,磁盘空间会增加吗?

时间:2017-09-21 07:00:07

标签: cassandra cassandra-2.1

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

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

这是一种正确的方法,如果是这样吗?

2 个答案:

答案 0 :(得分:4)

  

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

是的,是的。

考虑一个4节点集群,复制因子(RF)为3,每个节点有100GB的存储空间。假设数据足迹的初始完整副本为60GB。有4个节点和3个RF,每个节点将负责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

使用大小分层压缩(默认),您希望将每个节点保持在总磁盘使用量的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

基本上,数据的完整副本已增长到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

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

答案 1 :(得分:1)

您可以向群集添加更多节点,然后重新平衡群集。这会将您的数据分散到更多节点,并且应该减少单个节点上的数据量。如果您的数据分区足够好,那就是这样。 同时,请查看您的TTL值和GC_grace,并确保您所消耗的空间量是真正的保证。