Apache Cassandra:无法用任何种子闲聊

时间:2013-12-19 20:24:00

标签: cassandra-2.0

我已经构建了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)

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

15 个答案:

答案 0 :(得分:100)

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

检查你的cassandra.yaml并确保你的“listen_address”和“种子”值匹配,除了种子值需要它周围的引号。

答案 1 :(得分:22)

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

此问题的解决方案是:

listen_address: 172.31.0.2
broadcast_address: 55.70.33.10

答案 2 :(得分:8)

cassandra.yaml

中的

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

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

  3. broadcast_rpc_addresslisten_address应设置为本地IP (不是localhost或127.0.0.1

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

答案 3 :(得分:5)

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

答案 4 :(得分: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上打开端口的更多信息: https://blog.rstudio.org/2017/02/01/roxygen2-6-0-0/

答案 5 :(得分:2)

我在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

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

答案 6 :(得分:2)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

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

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

我重新开始很多次,过了一会儿就坚持了下来。看起来他们期望在八卦频道上进行双向通信,如果它发生的速度不够快(对我来说看起来只是一个非常短的时间),那么他们会放弃这一行并产生错误。

在我的情况下,我刚刚升级了我的软件并重新启动了计算机。所以显然这不是计算机之间的连接问题(我有防火墙和SSL,使问题复杂化)并且节点之前已经连接......所以我在数据存储方面找到的那个条目不适用......

strip

答案 9 :(得分:0)

我得到了同样的错误。可以有多个解决方案。希望我的错误就是你所做的。

我的本​​地主机IP指向某个域名(我这样做是因为我的Spring启动应用程序的服务器上下文是某个域名,如www.example.com:8080而不是localhost:8080,我有以下内容在Windows系统上的主机文件中输入。)

127.0.0.1 www.example.com

虽然我的cassandra批处理文件正在查找它找不到的localhost。所以,我在我的hosts文件中为localhost创建了另一个条目:

127.0.0.1  localhost

127.0.0.1  www.example.com

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

  

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

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

答案 12 :(得分:0)

感谢精灵

他的回答只是提醒我,我需要验证所有节点都必须能够彼此对话。
https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new-node-can-connect-to-seed-nodes

  

八卦通讯必须是双向的。

要验证使用此命令,您需要从双方

进行测试
  

nc -vz {your_node_ip} 7000

然后我想起昨天晚上我打开了ubuntu防火墙。我用

打开
  

sudo ufw允许7000 / tcp

现在正在工作

答案 13 :(得分: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,一旦我在种子节点中设置了 broadcast_address 问题就解决了。

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

答案 14 :(得分:-1)

我有同样的问题,我检查了端口,使用tcpdump,netcat来测试连接,最后是internode_encryption上的过期SSL证书。我修改了internode_encryption以使其“无”,重新启动所有节点并且工作正常。 在所有邻居节点都关闭之前。并且节点修复命令失败了: &#34;没有得到所有终端的积极回复&#34; P.S不要长时间将internode_encryption留空,只需重新生成证书并启用它。