添加新节点后如何重新平衡cassandra集群

时间:2013-05-02 16:28:02

标签: cassandra

我有一个3节点的cassandra集群,复制因子为2.节点正在运行dsc1.2.3或dsc1.2.4。每个节点的num_token值为256,并对initial_token进行了注释。这个3节点集群完全平衡,即每个集群拥有大约30%的数据。

其中一个节点崩溃,所以我启动了一个新节点,nodetool删除了崩溃的节点。新节点已添加到群集中,但两个较旧的节点现在拥有大部分数据(47.0%和52.3%),新节点仅占数据的0.7%。

nodetool状态的输出是

Datacenter: xx-xxxx
===================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address           Load       Tokens  Owns   Host ID                               Rack
UN  10.xxx.xxx.xxx    649.78 MB  256     47.0%  ba3534b3-3d9f-4db7-844d-39a8f98618f1  1c
UN  10.xxx.xxx.xxx    643.11 MB  256     52.3%  562f7c3f-986a-4ba6-bfda-22a10e384960  1a
UN  10.xxx.xxx.xxx    6.84 MB    256     0.7%   5ba6aff7-79d2-4d62-b5b0-c5c67f1e1791  1c

如何平衡此群集?

2 个答案:

答案 0 :(得分:6)

您没有提到在新节点上运行修复,如果您确实尚未这样做,则可能是您在新节点上缺少数据的原因。

在运行nodetool修复之前,新节点将仅保存写入其中的新数据或读取修复所引入的数据。对于vnodes,通常不需要重新平衡,如果我是正确理解vnodes,但我个人还没有转向使用vnodes所以我可能错了。

答案 1 :(得分:4)

看起来你的新节点没有引导。您是否已将Created SubFoo(1) Created SubFoo(2) 添加到cassandra.yaml?

如果您不想引导,可以在新节点上运行auto_bootstrap=true,然后在另外两个节点上运行nodetool repair,直到分发公平。