Cassandra双节点集群无法组建启动报错求助
Cassandra双节点集群启动报错排查与解决
问题描述
在两台节点(IP1:10.0.0.2、IP2:10.0.0.3)部署Cassandra并组建双节点集群时,启动出现以下报错:
INFO [Messaging-EventLoop-3-3] 2022-08-08 15:15:36,172 NoSpamLogger.java:92 - /10.0.0.3:7000->/10.0.0.2:7000-URGENT_MESSAGES-[no-channel] failed to connect io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: No route to host: /10.0.0.2:7000 Caused by: java.net.ConnectException: finishConnect(..) failed: No route to host at io.netty.channel.unix.Errors.throwConnectException(Errors.java:124) at io.netty.channel.unix.Socket.finishConnect(Socket.java:251) at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:673) at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:650) at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:530) at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:470) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:829) ERROR [main] 2022-08-08 15:15:37,034 CassandraDaemon.java:911 - Exception encountered during startup java.lang.RuntimeException: Unable to gossip with any peers at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1844) at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:650) at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:936) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:786) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:731) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:420) at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:765) at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:889)
当前节点yaml配置:
- IP1(10.0.0.2):
listen_address: 10.0.0.2 rpc_address: 10.0.0.2 seeds: "10.0.0.3:7000" - IP2(10.0.0.3):
listen_address: 10.0.0.3 rpc_address: 10.0.0.3 seeds: "10.0.0.3:7000"
已开放端口:8888、7000、7001、7199、9042、9142、9160
解决方案
1. 修正种子节点配置
双节点集群中,每个节点的seeds应包含所有种子节点(至少包含对方节点)。当前IP2的seeds仅配置自身,会导致IP1启动后无法被集群识别。
修改配置:
- IP1的
seeds改为:"10.0.0.2:7000,10.0.0.3:7000" - IP2的
seeds改为:"10.0.0.2:7000,10.0.0.3:7000"
2. 验证节点间网络连通性
报错中的No route to host说明节点间7000端口无法连通,需实际验证:
- 在IP1执行:
nc -zv 10.0.0.3 7000 - 在IP2执行:
nc -zv 10.0.0.2 7000
若连通失败,排查方向:
- 防火墙规则:确认端口开放规则已应用到对应网卡,且优先级正确
- 路由配置:检查节点是否在同一网段,路由表是否包含对方节点的路由条目
- 云环境安全组:若为云服务器,需额外配置安全组允许节点间7000端口的双向流量
3. 调整启动顺序
启动集群时遵循以下顺序:
- 先启动IP2节点,等待日志输出
Startup complete确认完全启动 - 再启动IP1节点,此时IP1会通过种子节点IP2加入集群
4. 清理脏数据(可选)
若之前启动失败留下不一致的集群状态,需清理后重启:
- 停止Cassandra服务:
sudo systemctl stop cassandra(根据实际服务管理方式调整) - 删除数据目录(默认
/var/lib/cassandra/data)和提交日志目录(默认/var/lib/cassandra/commitlog) - 按正确顺序重新启动节点
内容的提问来源于stack exchange,提问作者SSHanga
相关产品推荐
相关产品推荐

