如何从失败中恢复 Cassandra 节点 bootstrap

How to recover Cassandra node from failed bootstrap

一个节点在 bootstrapping 一个新节点时关闭,bootstrapping 失败。节点关闭,在其日志中留下以下消息:

信息 [main] 2015-02-07 06:03:32,761 StorageService.java:1025 - 加入:开始 bootstrap...
ERROR [main] 2015-02-07 06:03:32,799 CassandraDaemon.java:465 - 启动时遇到异常
java.lang.RuntimeException: 一致移动数据所需的节点已关闭 (/10.0.3.56)。如果您希望从可能不一致的副本中移动数据,请使用 -Dcassandra.consistent.rangemovement=false 重新启动节点

如何恢复这种情况?一旦故障节点重新联机,我可以重新启动 bootstrap 进程吗?还是我需要还原部分 bootstrap 并以某种方式重试?

我已经追查到原来的原因了。新节点能够连接到 10.0.3.56 处的节点,但 10.0.3.56 无法打开返回到新节点的连接。 10.0.3.56 包含一些需要移动到新节点的数据的唯一副本(复制因子 == 1),但它发送数据的尝试被阻止。

由于这涉及数据移动,而不仅仅是复制,并且根据代码中抛出异常的位置,我假设您正在尝试替换死节点,如下所述:http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_replace_node_t.html

目前看来,节点还没有入环。如果节点已经加入,您当然可以通过 运行 nodetool status 仔细检查。

如果没有,那么您可以简单地从数据、提交日志和 saved_caches 中删除所有内容,然后重新启动该过程。那个 10.0.2.56 节点出了什么问题?

如果此节点已加入环,那么在启动节点 10.0.2.56 后重新启动它应该仍然是安全的。