新的cassandra节点不能用种子闲聊

时间:2014-05-26 16:15:42

标签: cassandra-2.0

我正在尝试使用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。我只是想知道问题可能是什么以及如何解决它。

4 个答案:

答案 0 :(得分:12)

好的,在这一天花了一整天后,我终于在freenode找到了#cassandra IRC频道。 (这是我的第一个建议,定期去那里)

您遇到的问题很可能(在我的情况下)是所谓的“鸡与蛋”问题。鸡肉和鸡蛋: 节点1:种子= node2 节点2:种子= node1

两个节点都无法正常启动,因为没有在启动时完全启动的种子节点。

要解决此问题,请设置: 节点1:种子= node1,node2 节点2:seeds = node2。

现在,node1将启动。 节点2最终也将启动..

瞧。

答案 1 :(得分:2)

答案 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
  • 节点2:192.168.1.11
  • 节点3:192.168.1.12

最初指定的种子:

节点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地址。