Apache Ignite 2.15.0在AWS EC2上客户端启动绑定地址失败求助
Apache Ignite客户端连接EC2服务端BindException问题排查方案
修正客户端绑定地址配置
客户端模式下绝对不能绑定EC2的公网IP,因为该IP不属于本地机器网卡,绑定操作必然失败。客户端需绑定本地网卡地址(如0.0.0.0或本地内网IP),示例Spring Bean配置:// 通信SPI配置 TcpCommunicationSpi commSpi = new TcpCommunicationSpi(); commSpi.setLocalAddress("0.0.0.0"); // 绑定本地所有可用网卡 commSpi.setLocalPort(47100); // 指定本地可用端口,避免冲突 // 发现SPI配置 TcpDiscoverySpi discoSpi = new TcpDiscoverySpi(); discoSpi.setLocalAddress("0.0.0.0"); discoSpi.setLocalPort(47500);验证服务端地址解析配置
服务端的AddressResolver必须正确映射内网IP到公网IP,确保客户端能通过公网IP定位服务端。检查服务端配置:<bean class="org.apache.ignite.configuration.IgniteConfiguration"> <property name="addressResolver"> <bean class="org.apache.ignite.configuration.BasicAddressResolver"> <constructor-arg> <map> <!-- key为服务端内网IP,value为EC2公网IP --> <entry key="172.31.x.x" value="x.x.x.x"/> </map> </constructor-arg> </bean> </property> </bean>启动服务端后,查看日志中
Local node addresses字段,确认公网IP已被正确解析输出。配置客户端发现SPI指向服务端公网IP
客户端的TcpDiscoverySpi需将服务端公网IP设为发现节点(而非绑定该IP),示例:TcpDiscoverySpi discoSpi = new TcpDiscoverySpi(); discoSpi.setIpFinder(new TcpDiscoveryStaticIpFinder() {{ setAddresses(Collections.singletonList("x.x.x.x:47500")); // 服务端公网IP+发现端口 }});注意端口一致性:默认发现端口为47500,通信端口为47100,需与服务端配置匹配,同时安全组要开放这两个端口范围(47100-47200、47500-47600)。
排查本地端口占用
本地机器的47100-47200端口可能被其他进程占用,导致客户端无法绑定。执行以下命令检查:- Windows:
netstat -ano | findstr :47100 - Linux/macOS:
lsof -i :47100
若存在占用,可停止占用进程或修改客户端本地端口范围。
- Windows:
补充检查网络ACL配置
除安全组外,需确认EC2所属VPC的网络ACL允许入站和出站的47100-47200、47500-47600端口流量——网络ACL是VPC层面的防火墙,可能覆盖安全组规则。
内容的提问来源于stack exchange,提问作者Angelo Immediata
相关产品推荐
相关产品推荐

