2011-12-21 187 views
8
  1. 我在EC2上有12个节点的cassandra集群。
  2. 由于某些故障,我们完全丢失了一个节点。我的意思是这台机器不再存在。
  3. 因此,我创建了新的EC2实例,它具有与死节点不同的ip和相同的令牌,并且我还有该节点上的数据备份,所以它工作正常
  4. 但问题是死节点ip仍然在描述集群中显示为不可访问的节点。
  5. 作为该节点(EC2实例)不存在了,我不能用nodetool退役nodetool disablegossip

我怎样才能摆脱这种不可达节点的如何从Cassandra集群中删除死亡节点?

回答

5

常当您要将要设置新节点的令牌的节点替换为(failure node's token) - 1并让其启动时。从1.0开始,现在有一个标志可以在启动时指定到replace a dead node:“cassandra.replace_token =”。

既然你已经添加了新的节点与同样有一个额外的步骤:

  1. 移动新节点的令牌(failure node's token) - 1使用从节点组成一个nodetool move
  2. 运行nodetool removetoken <failed node's token>
  3. 每个节点

上运行nodetool cleanup这些基本上pre 1.0 instructions用于替换带有附加令牌的死节点移动。

+0

谢谢Psanford。但在我的情况下,我已经启动了与死节点具有相同标记的新节点。现在环状态良好且平衡。但是在描述集群中,它将死节点显示为无法访问。在大多数情况下它仍然很好,但是,我们使用sstableloader加载数据,而无法访问的节点sstableloader不起作用。可能的解决方案是什么? – samarth 2011-12-22 05:37:22

+0

您需要清除环中旧节点的知识。你可以用'nodetool removetoken'来做到这一点。你的问题是,也会删除替换节点。因此,在执行'removetoken'之前,需要将替换节点的标记移动到标记-1。 – psanford 2011-12-22 16:50:51

+0

我已经尝试了您建议的解决方案。我们已成功移动新节点。但是,在删除死亡节点期间,它陷入了困境:“RemovalStatus:删除令牌(62676456546693435176060154681903071729)。从等待复制确认[卡桑德拉-1/10.101.101.01' – samarth 2011-12-26 10:00:28

7

我有同样的问题,我解决了它与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 

正如你可以看到.201和.202死亡,在不同的网络上。如果没有适当的退役和重新调试,这些更改为.91和.92。我正在安装网络,并提出了一些错误......

二,删除.201用下面的命令:

nodetool removenode 4fa4d101-d8d2-4de6-9ad7-a487e165c4ac 

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

但与nodetool removetoken ...一样,它会阻止...(请参阅psandord答案中的samarth评论)但是,它有副作用,它会将UUID放入要删除的节点列表中。所以接下来我们可以强制删除:

nodetool removenode force 

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

现在节点接受它告诉我,这是消除无效项命令:

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

我们也看到它与其他两个节点通信,因此需要一点时间,但它仍然很快。

下一个nodetool status不显示.201节点。我再重复.202,现在状态很干净。

之后,你可能还需要运行一个清理在psanford答复中提到:

nodetool cleanup 

清理工作应在所有节点逐个运行,以确保变化充分考虑帐户。

+0

你好,请问我有问题。 nodetool状态返回只有一个节点(与IP @ 127.0.0.1)状态=向上/向下 | /州=正常/离开/加入/移动 - 地址加载令牌旗下拥有(有效)主机ID机架 联合国127.0.0.1 83.05 KB 256 100.0%460ddcd9-1ee8-48b8-A618-c076056aad07 RACK1 – researcher 2015-03-17 10:36:48

+0

我该怎么办更改IP地址?以及如何获得环上所有节点的列表?非常感谢。最好的祝福。 – researcher 2015-03-17 10:38:40

+0

搜索名为cassandra.yaml的文件并在文件内搜索名为seed_provider的条目。这有IP地址的条目。然后查看cassandra-rackdc.properties和cassandra-topology.properties文件。还有一个cassandra-topology.yaml,我认为它在新版本中不再使用。 – 2015-03-17 22:12:24