我正在尝试使用cassandra 2.0.7启动一个新节点。两个节点都在数字海洋。种子节点已启动并正在运行,我可以从我尝试启动的节点远程登录到该主机上的端口7000.
[root@cassandra02 apache-cassandra-2.0.7]# telnet 10.10.1.94 7000
Trying 10.10.1.94...
Connected to 10.10.1.94.
Escape character is '^]'.
但是当我在新节点上启动cassandra时,我看到以下异常:
INFO 00:01:34,744 Handshaking version with /10.10.1.94
ERROR 00:02:05,733 Exception encountered during startup
java.lang.RuntimeException: Unable to gossip with any seeds
at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1193)
at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:447)
at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:656)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:612)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:505)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:362)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:480)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:569)
java.lang.RuntimeException: Unable to gossip with any seeds
at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1193)
at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:447)
at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:656)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:612)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:505)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:362)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:480)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:569)
Exception encountered during startup: Unable to gossip with any seeds
ERROR 00:02:05,742 Exception in thread Thread[StorageServiceShutdownHook,5,main]
java.lang.NullPointerException
at org.apache.cassandra.gms.Gossiper.stop(Gossiper.java:1270)
at org.apache.cassandra.service.StorageService$1.runMayThrow(StorageService.java:573)
at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
at java.lang.Thread.run(Thread.java:745)
我在两个节点上都使用了murmur3分区,并且我在新节点的cassandra.yaml中列出了种子节点的IP。我只是想知道问题可能是什么以及如何解决它。
答案 0 :(得分:12)
好的,在这一天花了一整天后,我终于在freenode找到了#cassandra IRC频道。 (这是我的第一个建议,定期去那里)
您遇到的问题很可能(在我的情况下)是所谓的“鸡与蛋”问题。鸡肉和鸡蛋: 节点1:种子= node2 节点2:种子= node1
两个节点都无法正常启动,因为没有在启动时完全启动的种子节点。
要解决此问题,请设置: 节点1:种子= node1,node2 节点2:seeds = node2。
现在,node1将启动。 节点2最终也将启动..
瞧。
答案 1 :(得分:2)
检查防火墙:新节点中的端口设置
http://www.datastax.com/documentation/cassandra/2.0/cassandra/security/secureFireWall_r.html
答案 2 :(得分:1)
这里真正的问题是你试图在没有数据的情况下启动Cassandra并在所有节点上启用auto_bootstrap
。
对JRun来说,“鸡蛋和鸡蛋”实际上是“我试图自动引导节点,没有节点告诉它该做什么”的情况。
您需要在其中一个节点(最好是种子)上的auto_bootstrap
文件中禁用cassandra.yaml
。
请参阅:DataStax Cassandra 2.1 Documentation
具体来说:auto_bootstrap: false (Add this setting only when initializing a fresh cluster with no data.)
因此,要解决此问题...只需修改您的cassandra.yaml
文件,类似于以下示例:
三个节点C *群集无数据
IP地址信息:
最初指定的种子:
节点1(192.168.1.10)/节点3(192.168.1.12)
cassandra.yaml
- > - seeds: "192.168.1.10,192.168.1.12"
auto_bootstrap
默认启用
新指定的种子: 节点3(192.168.1.12)
**在所有三个节点上进行此更改:**
cassandra.yaml
- > - seeds: "192.168.1.12"
除上述外,还在种子节点上进行此更改
cassandra.yaml
- > auto_bootstrap: false
(很可能,auto_bootstrap
条目不存在,所以继续把它扔到yaml的某处。)
完成上述更改后,重新启动所有cassandra进程。
你应该没事,一旦他们全部启动,你就可以按照自己喜欢的方式回去调整你的种子!
答案 3 :(得分:0)
我遇到了同样的问题,并通过上面解释的JRun方法解决了这个问题。但最初它没有,因为我已将种子节点设置为127.0.0.1。后来我把它改成了我的界面ip地址并解决了问题。我必须设置相同的IP,用作监听地址和rpc地址。