需要 "balance" 个 cassandra 集群

Need to "balance" a cassandra cluster

我有一个我构建的测试集群,当 运行 nodetool 状态时查看它,我将数据分布在四个节点之间:

-- 地址加载令牌拥有

UN NODE3 1.61 GB 1 14.6%
UN NODE2 3.14 GB 1 19.4%
UN NODE1 7.68 GB 1 63.9%
UN NODE4 5.85 GB 1 2.0%

现在在我将数据提取到数据库之前添加了所有节点,但我认为我可能在将数据引入集群之前没有手动设置令牌信息而搞砸了。

我的问题是如何最好地重新调整它以更均匀地分布数据?

如果您不使用 Vnode(因为每个节点有 1 个令牌,所以没有),您可以在每个节点上移动令牌以平均分配您的环。为此,请执行以下操作:

  1. 计算令牌以根据集群中的节点数分配节点。您可以使用像 cassandra token calculator 这样的工具。使用 Murmur3Partitioner 和 4 个节点,您可以使用:(-9223372036854775808 -4611686018427387904 0 4611686018427387904)
  2. 一次一个节点使用nodetool move将节点移动到新令牌(即nodetool move -- 0)并等待它完成。可能还要等一下。根据节点当前与要移动到的令牌的接近程度来选择将哪些节点移动到哪个令牌也是明智的。
  3. 通常在该节点后处理 nodetool cleanup 以清除不再属于该节点的数据是个好主意。

+1 安迪的分数。我想再补充一件事。

为确保获得准确的 Owns %,您必须为 nodetool status <ks>

指定 Cassandra 密钥空间