新的 cassandra 节点不能用种子八卦
Posted
技术标签:
【中文标题】新的 cassandra 节点不能用种子八卦【英文标题】:new cassandra node can't gossip with seed 【发布时间】:2014-05-26 16:15:42 【问题描述】:我正在尝试使用 cassandra 2.0.7 启动一个新节点。两个节点都在 Digital Ocean。种子节点已启动并正在运行,我可以从我尝试启动的节点远程登录到该主机上的端口 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。我只是想知道问题可能是什么以及如何解决它。
【问题讨论】:
你能用 2.0.10 试试吗? 嘿,我也有。你解决了吗? 【参考方案1】:好吧,花了一整天的时间,我终于在 freenode 上找到了#cassandra IRC 频道。 (这是我的第一个建议,经常去那里)
您遇到的问题很可能(在我的情况下是)所谓的“鸡和蛋”问题。鸡和蛋: 节点 1:种子=节点 2 节点 2:种子=node1
两个节点都无法正常启动,因为没有种子节点在启动时完全启动。
要解决这个问题,只需设置: 节点 1:种子 = node1,node2 节点 2:种子 = node2。
现在,node1 将启动。 节点 2 最终也会启动。
瞧。
【讨论】:
【参考方案2】:检查防火墙:新节点中的端口设置
http://www.datastax.com/documentation/cassandra/2.0/cassandra/security/secureFireWall_r.html
【讨论】:
【参考方案3】:这里真正的问题是您试图在没有数据的情况下启动 Cassandra,并且在所有节点上启用了 auto_bootstrap
。
对于 JRun 的观点,“鸡和蛋”实际上是“我正在尝试自动引导节点而没有节点告诉它该做什么”的情况。
您需要在其中一个节点(最好是种子)上的 cassandra.yaml
文件中禁用 auto_bootstrap
。
请看: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 进程。
您应该会没事的,一旦它们完全启动,您就可以返回并按照您喜欢的方式调整您的种子!
【讨论】:
【参考方案4】:我遇到了同样的问题,并通过上面解释的 JRun 方法解决了它。但最初并没有,因为我将种子节点设置为 127.0.0.1。后来我把它改成了我的接口ip地址,问题就解决了。我必须设置相同的 IP,用作监听地址和 rpc 地址。
【讨论】:
以上是关于新的 cassandra 节点不能用种子八卦的主要内容,如果未能解决你的问题,请参考以下文章
Apache Cassandra随笔之多节点跨数据中心集群配置以及日常操作
Apache Cassandra:auto_bootstrap 属性是不是允许新(非种子)节点从另一个 DC 中的节点流式传输数据?