【发布时间】:2013-12-31 04:55:56
【问题描述】:
Cassandra 版本 1.2.9。五节点集群,但其中一个节点因硬件故障而停机,修复/更换 ETA 未知。我想停用/删除 down 节点(通知使所有日志混乱)。 nodetool removenode 似乎很完美,除了它需要一个主机 ID。 down 节点没有主机 ID(在 status 中列为 null):
removetoken 似乎不再是 nodetool 的选项。
移除这个死节点的正确方法是什么?
【问题讨论】:
-
我打算给你一个指向 DataStax 的“替换死节点”文档的链接,但最后一步是做一个
nodetool removenode,你说它对你不起作用。你试过看nodetool move吗?从理论上讲,您可以调出替换节点(将 initial_token 设置为死节点,减 1),然后将其移动到所需的令牌范围。 -
我还没有替换服务器。我试过removetoken;在此版本中已弃用。我试过 removenode;但是没有主机ID,所以它失败了。我尝试了移动,但它没有足够的流媒体资源。接下来是一个 JMX 命令:进入 shell 模式。 % jmx_invoke -m org.apache.cassandra.net:type=Gossiper unsafeAssassinateEndpoint
。失败并出现空指针异常。仍在努力。 -
以下步骤确实有效: - 1) 在每个剩余节点上,将 -Dcassandra.load_ring_state=false 添加到 cassandra-env.sh 文件中的 JVM_OPTS 并重新启动。 - 2) 再次运行 nodetool status 并确认不需要的节点已经消失。 - 3) 在每个节点上,运行 delete from system.peers where peer = '[死节点的ip地址]'; via cqlsh - 4) 从每个节点上的 cassandra-env.sh 中删除 -Dcassandra.load_ring_state=false 并重新启动。