我正在恢复到由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 start
,10.40.1.1
,10.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可能会发生变化。
我的问题是:
我是否需要在开始时明确说明更换自己?文档是不完整还是我在步骤中遗漏了什么?
答案 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_caches
和commitlog
并再次启动cassandra
。
为您遇到的所有节点执行此操作时出现上述错误。