我已经构建了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)
我可以改变什么来运行它?
答案 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
中的
确保您的cluster_name
条目匹配群集中的所有节点
(如果更改了群集名称,则可能需要删除存储空间)
验证所有节点是否可以相互ping通
broadcast_rpc_address
和listen_address
应设置为本地IP
(不是localhost或127.0.0.1
)
种子应指向种子的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,使问题复杂化)并且节点之前已经连接......所以我在数据存储方面找到的那个条目不适用......
答案 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留空,只需重新生成证书并启用它。