use*_*631 2 cassandra cassandra-2.1
我在 Cassandra 集群(部署在 ec2 实例上)中遇到这样的情况:集群的每个节点中的磁盘空间都将耗尽。现在,如果我在 Cassandra 集群中添加更多实例,是否会增加磁盘空间?
我的意思是,每当我们空间不足时,我们可以向 cassandra 集群添加更多实例以增加总体磁盘空间吗?
如果是的话,这是正确的做法吗?
我的意思是,每当我们空间不足时,我们可以向 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。
| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |