51

我已经构建了 Cassandra 服务器 2.0.3,然后运行它。它正在启动,然后通过消息停止:

X:\MyProjects\cassandra\apache-cassandra-2.0.3-src\bin>cassandra.bat >log.txt
java.lang.RuntimeException: Unable to gossip with any seeds
        at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1160)
        at org.apache.cassandra.service.StorageService.checkForEndpointCollision
(StorageService.java:416)
        at org.apache.cassandra.service.StorageService.joinTokenRing(StorageServ
ice.java:608)
        at org.apache.cassandra.service.StorageService.initServer(StorageService
.java:576)
        at org.apache.cassandra.service.StorageService.initServer(StorageService
.java:475)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.ja
va:346)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon
.java:461)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.jav
a:504)

我可以改变什么来运行它?

4

16 回答 16

112

我的 cassandra v2.0.4 集群运行单个节点时遇到了类似的问题。

检查您的 cassandra.yaml 并确保您的“listen_address”和“seeds”值匹配,但种子值需要在其周围加上引号。

于 2014-01-22T22:04:41.133 回答
23

如果您的私有 IP 地址与公共 IP 地址不同(例如在 AWS 上),您可能会遇到此问题。例如,当它显示为“55.70.33.10”时,主机认为它是“172.31.0.2”。

这个问题的解决方法是:

listen_address: 172.31.0.2
broadcast_address: 55.70.33.10
于 2014-08-21T09:47:16.587 回答
9

cassandra.yaml

  1. 确保您的cluster_name条目在集群中的所有节点上都匹配(如果您更改了集群名称,您可能需要删除您的存储)

  2. 验证所有节点是否可以相互ping通

  3. broadcast_rpc_address并且listen_address应该设置为本地 IP(不是 localhost 或127.0.0.1

  4. 种子应指向种子的 IP 地址

于 2016-03-30T08:37:31.183 回答
6

如果您在 AWS 上并使用 ,Ec2MultiRegionSnitch则需要将种子设置为公共 IP 地址而不是私有 IP。

于 2014-08-21T06:31:27.717 回答
3

我在 Ubuntu 16.04 上遇到了同样的问题。我不确定这些更改中的哪一个使它起作用,XXX.XXX.XXX.XXX您面向公众的 IP 地址在哪里,以下是来自的选择cassandra.yaml

seed_provider:
    # Addresses of hosts that are deemed contact points. 
    # Cassandra nodes use this list of hosts to find each other and learn
    # the topology of the ring.  You must change this if you are running
    # multiple nodes!
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          # seeds is actually a comma-delimited list of addresses.
          # Ex: "<ip1>,<ip2>,<ip3>"
          - seeds: "XXX.XXX.XXX.XXX"


listen_address: XXX.XXX.XXX.XXX
broadcast_address: XXX.XXX.XXX.XXX
broadcast_rpc_address: XXX.XXX.XXX.XXX
listen_on_broadcast_address: true
start_rpc: true
rpc_address: XXX.XXX.XXX.XXX

由于某种原因,我还需要重新启动我的虚拟机。¯_(ツ)_/¯

于 2018-02-20T19:47:26.740 回答
2

对于 RHEL 上的快速单节点设置,我执行了以下操作:获取有关您的网络接口设置的信息:

# /sbin/ifconfig -a

它将列出它们所连接的接口和 IP 地址。通常它会显示一个“以太网”接口和一个“本地环回”。获取关联的 IP 地址。

然后编辑 conf/cassandra.yaml:

rpc_address: [Local Loopback address]
broadcast_rpc_address: [Ethernet address]
listen_address: [Local Loopback address]
broadcast_address: [Ethernet address]
listen_on_broadcast_address: true
seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "[Ethernet address]"

然后,在 Linux 防火墙上打开正确的端口,即 9042、7000 和 7001。有关在 Linux 上打开端口的更多信息:http: //ask.xmodulo.com/open-port-firewall-centos-rhel.html

于 2017-03-09T18:39:45.160 回答
2

在 cassandra.yaml 中,我将种子从域名更新为 IP 地址。它有效。

于 2018-03-27T23:12:00.830 回答
1

发生在我身上是因为在我的配置中指定了“initial_token”设置(我想是因为我刚刚从另一个集群成员复制到配置文件)。清除数据目录,注释掉设置并重新启动节点后,对我来说效果很好。

于 2014-09-03T12:41:16.557 回答
1

我今天遇到了这个错误...

除了时间问题之外,我找不到任何错误原因。

我重新启动了很多次,过了一会儿它就卡住了。看起来他们希望在八卦频道上进行双向通信,如果它发生得不够快(对我来说这看起来很短),那么他们就会掉线并产生错误。

就我而言,我刚刚升级了我的软件并重新启动了计算机。所以这显然不是计算机之间的连接问题(我有防火墙和 SSL,使事情复杂化)并且节点之前连接过......所以我从 datastax 找到的一个条目并不适用......

https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new-node-can-connect-to-种子节点

于 2016-10-27T10:53:36.543 回答
0

禁用防火墙和 SELINUX,然后重试

于 2017-06-14T07:15:29.153 回答
0

感谢 elvingt

他的回答只是提醒我,我需要验证所有节点都需要能够相互交谈。
https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new-node-can-connect-to-种子节点

八卦通信必须是双向的。

要验证使用此命令,您需要从BOTH SIDE进行测试

nc -vz {your_node_ip} 7000

然后我记得我昨晚打开了我的 ubuntu 防火墙。我打开它

sudo ufw 允许 7000/tcp

它现在正在工作

于 2019-04-03T19:32:34.953 回答
0

在我们的案例中,启用了 ssl,并且 cassandra.yaml 配置看起来很好,如上述评论所示。然后我们通过在 cassandra-env.sh -Djavax.net.debug=ssl:handshake中添加下面的 jvm 参数来启用 ssl 调试

再次启动节点后,我们在 cassandra 日志文件中注意到以下内容

MessagingService-Outgoing-geo2_host/xx.xx.xx.xx,等待关闭时出现异常 javax.net.ssl.SSLHandshakeException:收到致命警报:certificate_unknown

在进一步调查 ssl 调试日志后,我们知道证书无效。修复此 ssl 问题后,节点能够加入集群。

于 2018-05-03T06:29:35.980 回答
0

在启动/引导期间出现错误

不能用任何种子八卦

表示broadcast_address存在一些问题。broadcast_address 负责与其他节点通信,而不是与客户端通信。

此地址必须在种子节点中设置(种子节点必须设置),如果您使用云虚拟机,您可能有不同的 IP(公共和私有),因此建议使用您的私有 IP 作为广播地址,这将节省您的 n/w 成本出色地。

# Address to broadcast to other Cassandra nodes
# Leaving this blank will set it to the same value as listen_address
broadcast_address: 10.11.xx.xxx

在我的场景中,我使用的是 IBM,一旦我在种子节点中设置了广播地址,问题就得到了解决。

请确保您先启动种子节点,然后再启动其他节点,此顺序是强制性的。

于 2021-03-09T13:19:25.973 回答
0

改变价值cassandra.yaml 来解决我的问题listen_addresslocalhostdomainName

于 2021-12-27T19:22:10.547 回答
0

我得到了同样的错误。可以有不止一种解决方案。希望我的错误是你所做的。

我让我的 localhost IP 指向某个域名(我这样做是为了让我的 Spring Boot 应用程序的服务器上下文是某个域名,www.example.com:8080而不是localhost:8080,并且我在 Windows 系统上的 hosts 文件中有以下条目)。

127.0.0.1 www.example.com

当我的 cassandra 批处理文件正在寻找localhost它没有找到时。所以,我在我的主机文件中也为 localhost 做了另一个条目:

127.0.0.1  localhost

127.0.0.1  www.example.com

添加后,我打开了新的命令提示符,cassandra batch从 cassandra bin 目录运行,然后它就可以工作了。

于 2017-06-12T11:43:49.253 回答
-1

我有同样的问题,我检查了端口,使用 tcpdump、netcat 来测试连接,最后涉及到 internode_encryption 上的过期 SSL 证书。我修改了 internode_encryption 以使其“无”,重新启动所有节点并且它工作。在所有邻居节点都关闭之前。并且节点修复命令失败:“没有从所有端点得到肯定的答复” PS 不要长时间将 internode_encryption 保留为 none,只需重新生成证书并重新启用它。

于 2017-06-28T18:43:34.060 回答