我在重新启动后(在新的虚拟机实例上)让现有的Cassandra节点再次加入群集时遇到问题.
根据nodetool状态,我有一个运行的Cassandra集群,其中4个节点都处于"up and normal"状态.节点在Azure中的虚拟机上运行.我更改了10.0.0.6的虚拟机的实例类型,该类型在重新启动此计算机时返回.机器停留在10.0.0.6.重新启动后,我无法再次启动Cassandra.我得到这个例外:
INFO 22:39:07 Handshaking version with /10.0.0.4
INFO 22:39:07 Node /10.0.0.6 is now part of the cluster
INFO 22:39:07 Node /10.0.0.5 is now part of the cluster
INFO 22:39:07 Handshaking version with cassandraprd001/10.0.0.6
INFO 22:39:07 Node /10.0.0.9 is now part of the cluster
INFO 22:39:07 Handshaking version with /10.0.0.5
INFO 22:39:07 Node /10.0.0.4 is now part of the cluster
INFO 22:39:07 InetAddress /10.0.0.6 is now UP
INFO 22:39:07 Handshaking version with /10.0.0.9
INFO 22:39:07 InetAddress /10.0.0.4 is now UP
INFO 22:39:07 InetAddress /10.0.0.9 is now UP
INFO 22:39:07 InetAddress /10.0.0.5 is now UP
ERROR 22:39:08 Exception encountered during startup
java.lang.RuntimeException: A node with address cassandraprd001/10.0.0.6 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:455) ~[apache-cassandra-2.1.0.jar:2.1.0]
at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:667) ~[apache-cassandra-2.1.0.jar:2.1.0]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:615) ~[apache-cassandra-2.1.0.jar:2.1.0]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:509) ~[apache-cassandra-2.1.0.jar:2.1.0]
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:338) [apache-cassandra-2.1.0.jar:2.1.0]
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:457) [apache-cassandra-2.1.0.jar:2.1.0]
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:546) [apache-cassandra-2.1.0.jar:2.1.0]
java.lang.RuntimeException: A node with address cassandraprd001/10.0.0.6 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:455)
at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:667)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:615)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:509)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:338)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:457)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:546)
Exception encountered during startup: A node with address cassandraprd001/10.0.0.6 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
INFO 22:39:08 Announcing shutdown
Run Code Online (Sandbox Code Playgroud)
我正在使用Cassandra 2.1.0.我没有重播死节点 - 我只是想让旧节点重新启动并运行.根据nodetool状态(在其他节点上),所有节点都是"up and normal",10.0.0.6除外,它是"down和normal".
如何让这个节点重新启动并运行?
bac*_*den 14
首先,在另一个节点上,使用
nodetool status
Run Code Online (Sandbox Code Playgroud)
结果显示群集中的节点列表.使用ip找不到启动的节点,获取其id并填写命令:
nodetool removenode <node_id>
Run Code Online (Sandbox Code Playgroud)
然后开始cassandra.
最好,
快速回答,如果节点的IP是10.200.10.200
加上这个
JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address=10.200.10.200"
Run Code Online (Sandbox Code Playgroud)
到你的结束
cassandra-env.sh
Run Code Online (Sandbox Code Playgroud)
完成后别忘了将其删除.
小智 3
你可以看看这个博客,http://blog.alteroot.org/articles/2014-03-12/replace-a-dead-node-in-cassandra.html。
它对我有用,这是卡桑德拉的一个错误。如果你的节点的host_id改变了,但是使用旧的IP,将会抛出这个异常。
如果您使用Cassandra 2.xx,则应修改cassandra/conf/cassandra-env.sh。
最后,不要忘记在完成引导后删除对 cassandra-env.sh 的修改!
| 归档时间: |
|
| 查看次数: |
10884 次 |
| 最近记录: |