开发者社区 问答 正文

关于Cassandra集群配置的问题

想要配置一个多数据中心的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]

请问哪里出错了?

展开
收起
游客mkssucsidh6r4 2019-11-13 15:47:36 2257 分享 版权
阿里云 AI 助理回答

从您提供的错误信息来看,机器B在启动时遇到的问题是无法与任何对等节点(peers)进行Gossip通信。这通常意味着网络配置、防火墙设置或Cassandra配置存在问题,导致节点间无法正常通信。以下是一些可能的解决步骤:

  1. 检查网络连通性:确保机器A和机器B之间网络是通畅的,特别是在它们的public IP地址之间。可以尝试使用ping命令或者更高级的网络诊断工具(如traceroute/tracert)来确认。

  2. 防火墙设置:请检查两台机器的防火墙规则,确保Cassandra使用的端口(默认为7000用于内部通信/Gossip,9042用于客户端连接)没有被阻塞。如果是在云环境中,还需要检查安全组规则是否允许这些端口的流量。

  3. Seeds配置:虽然您已经将机器A的public IP作为机器B的seed,但请确保机器A能够响应来自机器B的Gossip请求。同时,请确认种子节点列表是稳定的,并且所有节点都能访问到至少一个种子节点。有时,增加多个种子节点可以提高集群初始化的成功率。

  4. listen_address与broadcast_address:您的配置中,listen_address使用了私有IP,而broadcast_address使用了public IP。这种配置在某些情况下可能导致问题,尤其是当节点需要直接通过public IP相互通信时。请考虑是否有必要调整这些设置,以确保节点间的直接通信不受阻碍。

  5. endpoint_snitch:您已正确设置了GossipingPropertyFileSnitch,请确保cassandra-rackdc.properties文件中的数据中心(datacenter)和机架(rack)信息配置无误,且与实际的物理布局相符。

  6. 日志和系统时间:查看机器B上的Cassandra日志文件(如system.log),可能会提供更多关于失败原因的细节。另外,确保两台机器的系统时间同步,时间不同步也可能导致Gossip协议出现问题。

如果以上步骤都检查过且未发现问题,建议进一步查阅Cassandra官方文档或社区论坛,寻找类似问题的解决方案,或者考虑升级到较新的Cassandra版本,因为旧版本可能存在已知的bug影响多数据中心部署。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: