【问题标题】:Cassandra - How to remove a dead nodeCassandra - 如何删除死节点
【发布时间】: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 并重新启动。

标签: cassandra nodetool


【解决方案1】:

问题是针对旧版本的 cassandra。但是官方的解决方案应该适用于任何版本的 cassandra - https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsGossipPurge.html

那里的步骤基本上是告诉停止集群,删除与peering相关的sstables,清除gossip状态并重新启动集群;这是有道理的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2015-02-11
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多