如何从Cassandra集群中删除死节点?

sam*_*rth 8 cluster-computing amazon-ec2 cassandra cassandra-0.7

  1. 我在EC2上有12个节点的cassandra集群.
  2. 由于一些失败,我们完全失去了一个节点.我的意思是机器不再存在了.
  3. 所以我创建了新的EC2实例,其中包含与死节点不同的ip和相同的令牌,我也在该节点上备份了数据,因此它工作正常
  4. 但问题是死节点ip仍然在描述集群中显示为无法访问的节点.
  5. 由于该节点(EC2实例)不再存在,我无法使用nodetool decommissionnodetool disablegossip

我怎样才能摆脱这个无法到达的节点

Ale*_*lke 8

我有同样的问题,我解决了它removenode,这不需要你找到和更改节点令牌.

首先,获取节点UUID:

nodetool status

DN  192.168.56.201  ?          256     13.1%  4fa4d101-d8d2-4de6-9ad7-a487e165c4ac  r1
DN  192.168.56.202  ?          256     12.6%  e11d219a-0b65-461e-babc-6485343568f8  r1
UN  192.168.2.91    156.04 KB  256     12.4%  e1a33ed4-d613-47a6-8b3b-325650a2bbd4  RAC1
UN  192.168.2.92    156.22 KB  256     13.6%  3a4a086c-36a6-4d69-8b61-864ff37d03c9  RAC1
UN  192.168.2.93    149.6 KB   256     11.3%  20decc72-8d0a-4c3b-8804-cc8bc98fa9e8  RAC1
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,.201和.202已经死了并且在不同的网络上.如果没有适当的退役和重新调试,这些已经改为.91和.92.我正在安装网络并犯了一些错误......

其次,使用以下命令删除.201:

nodetool removenode 4fa4d101-d8d2-4de6-9ad7-a487e165c4ac
Run Code Online (Sandbox Code Playgroud)

(在旧版本中,它是nodetool删除...)

但就像nodetool removetoken ...它一样,它阻止......(请参阅samarth在psandord回答中的评论)然而,它有副作用,它将UUID放在要删除的节点列表中.接下来我们可以强制删除:

nodetool removenode force
Run Code Online (Sandbox Code Playgroud)

(在旧版本中,它是nodetool删除...)

现在节点接受它告诉我它正在删除无效条目的命令:

RemovalStatus:删除令牌(-9136982325337481102).等待[/192.168.2.91,/192.168.2.92]的复制确认.

我们还看到它与其他两个节点进行通信,因此需要一点时间,但它仍然非常快.

接下来a nodetool status不显示.201节点.我重复.202,现在状态很干净.

在那之后你可能还想运行psanford回答中提到的清理:

nodetool cleanup
Run Code Online (Sandbox Code Playgroud)

应该逐个在所有节点上运行清理,以确保完全考虑更改.

  • 请注意,在Cassandra 2.0+中,nodetool的"remove"命令现在是"removenode". (2认同)

psa*_*ord 6

通常在替换节点时,您要将新节点的令牌设置为(failure node's token) - 1并引导它.从1.0开始,现在可以在启动时指定一个标志来替换死节点:"cassandra.replace_token =".

由于您已经使用相同的令牌添加了新节点,因此还有一个额外的步骤:

  1. 将新节点的标记移动到(failure node's token) - 1使用状态nodetool move
  2. 运行nodetool removetoken <failed node's token>从节点组成一个
  3. nodetool cleanup在每个节点上运行

这些基本上是用于通过附加令牌移动替换死节点的预1.0指令.