我遇到Cassandra集群(在ec2实例上部署)的情况,这样,磁盘空间将在集群的每个节点中耗尽空间。现在,如果我在Cassandra集群中添加更多实例,它会增加磁盘空间吗?
我的意思是,每当我们的空间不足时,我们可以向cassandra集群添加更多实例以增加整体磁盘空间吗?
这是一种正确的方法,如果是这样吗?
答案 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,并确保您所消耗的空间量是真正的保证。