Cassandra在恢复到新群集时重新启动问题

时间:2016-08-26 19:52:16

标签: cassandra datastax restore cassandra-2.2

我正在恢复到由3个节点组成的全新Cassandra % strings libFoo.so | grep "Greetings from" Greetings from Foo % strings libBar.so | grep "Greetings from" Greetings from Bar 群集。

新群集的初始群集运行状况:

2.2.5

作为restore instructions in Datastax docs的一部分,我在新群集上执行以下操作:

1)-- Address Load Tokens Owns Host ID Rack UN 10.40.1.1 259.31 KB 256 ? d2b29b08-9eac-4733-9798-019275d66cfc uswest1adevc UN 10.40.1.2 230.12 KB 256 ? 5484ab11-32b1-4d01-a5fe-c996a63108f1 uswest1adevc UN 10.40.1.3 248.47 KB 256 ? bad95fe2-70c5-4a2f-b517-d7fd7a32bc45 uswest1cdevc 一个接一个地放在所有三个节点上。

2)使用备份的令牌环信息为所有三个节点编辑cassandra stop。 [文档中的第2步]

3)从cassandra.yaml [文档中的步骤4]

中删除内容

4)/var/lib/cassandra/data/system/*分别在节点cassandra start10.40.1.110.40.1.2上。

结果: 10.40.1.3成功重新启动:

10.40.1.1

但是第二个和第三个节点无法重新启动说明:

--  Address       Load       Tokens       Owns    Host ID                               Rack
UN  10.40.1.1   259.31 KB   256          ?       2d23add3-9eac-4733-9798-019275d125d3  uswest1adevc
java.lang.RuntimeException: A node with address 10.40.1.2 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
    at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:546) ~[apache-cassandra-2.2.5.jar:2.2.5]
    at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:766) ~[apache-cassandra-2.2.5.jar:2.2.5]
    at org.apache.cassandra.service.StorageService.initServer(StorageService.java:693) ~[apache-cassandra-2.2.5.jar:2.2.5]
    at org.apache.cassandra.service.StorageService.initServer(StorageService.java:585) ~[apache-cassandra-2.2.5.jar:2.2.5]
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:300) [apache-cassandra-2.2.5.jar:2.2.5]
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:516) [apache-cassandra-2.2.5.jar:2.2.5]
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:625) [apache-cassandra-2.2.5.jar:2.2.5]
INFO  [StorageServiceShutdownHook] 2016-08-09 18:13:21,980 Gossiper.java:1449 - Announcing shutdown

最终群集运行状况:

java.lang.RuntimeException: A node with address 10.40.1.3 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
...

我了解在删除系统目录后,节点的HostID可能会发生变化。

我的问题是:

我是否需要在开始时明确说明更换自己?文档是不完整还是我在步骤中遗漏了什么?

3 个答案:

答案 0 :(得分:0)

原来有一些陈旧的目录commit_log和saved_caches,我之前错过了删除。这些说明适用于删除的目录。

答案 1 :(得分:0)

通常在这样的情况下,在我做了

之后

$ systemctl stop cassandra

我将运行

$ ps awxs | grep cassandra

会注意到cassandra仍然有一些功能。

我经常做一个

$ kill -9 cassandra.pid

$ rm -rf / var / lib / cassandra / data / *&&的/ var / lib中/卡桑德拉/ commitlog / *

答案 2 :(得分:0)

java.lang.RuntimeException: A node with address 10.40.1.3 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.

如果您仍然遇到上述错误,则表示您的cassandra进程正在该节点上运行。首先登录10.40.1.3节点。然后按照以下步骤 -

$ jps

您会看到某些进程正在运行。例如:

9107 Jps 1112 CassandraDaemon

然后按执行CassandraDaemon后看到的进程ID终止jps进程。在我的示例中,此处为1112的流程ID CassandraDaemon

$ kill -9 1112

然后在一段时间后再次检查流程 -

$ jps

您将看到CassandraDaemon将不再可用。

9170 Jps

然后移除您的saved_cachescommitlog并再次启动cassandra。 为您遇到的所有节点执行此操作时出现上述错误。