想要配置一个多数据中心的Cassandra集群 A,B在不同局域网
机器A seeds: a的public ip listen_address: a的private ip broadcast_address: a的public ip rpc_address: 0.0.0.0 broadcast_rpc_address: a的public ip endpoint_snitch: GossipingPropertyFileSnitch
机器B seeds: a的public ip listen_address: b的private ip broadcast_address: b的public ip rpc_address: 0.0.0.0 broadcast_rpc_address: b的public ip endpoint_snitch: GossipingPropertyFileSnitch
A,B的机架信心和数据中心信息已经在cassandra-rackdc.properties中配置
机器A能够正常启动 机器B启动时会出错 Exception (java.lang.RuntimeException) encountered during startup: Unable to gossip with any peers java.lang.RuntimeException: Unable to gossip with any peers at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1530) at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:585) at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:843) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:702) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:651) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:388) at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:620) at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:742) ERROR [main] 2019-11-13 15:26:32,807 CassandraDaemon.java:759 - Exception encountered during startup java.lang.RuntimeException: Unable to gossip with any peers at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1530) ~[apache-cassandra-3.11.5.jar:3.11.5] at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:585) ~[apache-cassandra-3.11.5.jar:3.11.5] at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:843) ~[apache-cassandra-3.11.5.jar:3.11.5] at org.apache.cassandra.service.StorageService.initServer(StorageService.java:702) ~[apache-cassandra-3.11.5.jar:3.11.5] at org.apache.cassandra.service.StorageService.initServer(StorageService.java:651) ~[apache-cassandra-3.11.5.jar:3.11.5] at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:388) [apache-cassandra-3.11.5.jar:3.11.5] at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:620) [apache-cassandra-3.11.5.jar:3.11.5] at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:742) [apache-cassandra-3.11.5.jar:3.11.5]
请问哪里出错了?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您提供的错误信息来看,机器B在启动时遇到的问题是无法与任何对等节点(peers)进行Gossip通信。这通常意味着网络配置、防火墙设置或Cassandra配置存在问题,导致节点间无法正常通信。以下是一些可能的解决步骤:
检查网络连通性:确保机器A和机器B之间网络是通畅的,特别是在它们的public IP地址之间。可以尝试使用ping
命令或者更高级的网络诊断工具(如traceroute
/tracert
)来确认。
防火墙设置:请检查两台机器的防火墙规则,确保Cassandra使用的端口(默认为7000用于内部通信/Gossip,9042用于客户端连接)没有被阻塞。如果是在云环境中,还需要检查安全组规则是否允许这些端口的流量。
Seeds配置:虽然您已经将机器A的public IP作为机器B的seed,但请确保机器A能够响应来自机器B的Gossip请求。同时,请确认种子节点列表是稳定的,并且所有节点都能访问到至少一个种子节点。有时,增加多个种子节点可以提高集群初始化的成功率。
listen_address与broadcast_address:您的配置中,listen_address使用了私有IP,而broadcast_address使用了public IP。这种配置在某些情况下可能导致问题,尤其是当节点需要直接通过public IP相互通信时。请考虑是否有必要调整这些设置,以确保节点间的直接通信不受阻碍。
endpoint_snitch:您已正确设置了GossipingPropertyFileSnitch
,请确保cassandra-rackdc.properties
文件中的数据中心(datacenter)和机架(rack)信息配置无误,且与实际的物理布局相符。
日志和系统时间:查看机器B上的Cassandra日志文件(如system.log
),可能会提供更多关于失败原因的细节。另外,确保两台机器的系统时间同步,时间不同步也可能导致Gossip协议出现问题。
如果以上步骤都检查过且未发现问题,建议进一步查阅Cassandra官方文档或社区论坛,寻找类似问题的解决方案,或者考虑升级到较新的Cassandra版本,因为旧版本可能存在已知的bug影响多数据中心部署。