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

添加新节点后如何重新平衡cassandra群集,cassandra,Cassandra,我有一个3节点的cassandra集群,复制因子为2。节点正在运行dsc1.2.3或dsc1.2.4。每个节点的num_token值为256,并对初始_token进行了注释。这3个节点的集群是完全平衡的,即每个节点拥有大约30%的数据 其中一个节点崩溃了,所以我启动了一个新节点,nodetool删除了崩溃的节点。新节点已添加到集群中,但两个旧节点现在拥有大部分数据(47.0%和52.3%),而新节点仅拥有0.7%的数据 nodetool状态的输出为 Datacenter: xx-xxxx ===

我有一个3节点的cassandra集群,复制因子为2。节点正在运行dsc1.2.3或dsc1.2.4。每个节点的num_token值为256,并对初始_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

如何平衡此群集?

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


在运行nodetool修复之前,新节点将只保存写入它的新数据或读取修复拉入的数据。对于VNode,如果我正确理解VNode,您通常不需要重新平衡,但我个人还没有开始使用VNode,所以我可能错了。

看起来您的新节点还没有启动。您是否将
auto_bootstrap=true
添加到您的cassandra.yaml


如果不想引导,可以在新节点上运行
nodetool repair
,然后在其他两个节点上运行
nodetool cleanup
,直到分配公平为止

是否可以包含“nodetool status”的输出?是否也使用num_tokens=256启动新节点?是否编辑了添加“nodetool status”输出的帖子?是否确实没有使用num_tokens=1启动新节点,然后设置num_tokens=256,然后重新启动它?这可以解释你看到了什么。我不能很好地解释你看到了什么,但是在第一次开始Cassandra之前设置这些属性是很重要的。我建议您停用新节点,完全擦除其数据并提交日志目录,然后将其重新引导。