如何向Ignite集群添加新节点?节点加入失败问题排查
Ignite新节点无法加入集群问题排查
问题现象
当前服务器已运行1个Ignite(GridGain)实例,使用匹配的配置启动新节点后长时间无法加入集群。此前厚客户端连接服务端测试正常,相关配置与现象如下:
运行中服务端配置
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> <property name="igniteInstanceName" value="rho-cache"/> <property name="consistentId" value="rho-cache"/> <property name="dataStorageConfiguration"> <bean class="org.apache.ignite.configuration.DataStorageConfiguration"> <!-- WAL段大小设置为128MB --> <property name="walSegmentSize" value="#{128 * 1024 * 1024}"/> <property name="defaultDataRegionConfiguration"> <bean class="org.apache.ignite.configuration.DataRegionConfiguration"> <!-- 开启持久化 --> <property name="persistenceEnabled" value="true"/> </bean> </property> <property name="storagePath" value="work"/> </bean> </property> <property name="discoverySpi"> <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> <property name="ipFinder"> <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder"> <property name="addresses"> <list> <value>10.1.8.186</value> </list> </property> </bean> </property> </bean> </property> </bean>
新节点配置
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> <property name="igniteInstanceName" value="rho-1-cache"/> <property name="consistentId" value="rho-1-cache"/> <property name="dataStorageConfiguration"> <bean class="org.apache.ignite.configuration.DataStorageConfiguration"> <!-- WAL段大小设置为128MB --> <property name="walSegmentSize" value="#{128 * 1024 * 1024}"/> <property name="defaultDataRegionConfiguration"> <bean class="org.apache.ignite.configuration.DataRegionConfiguration"> <!-- 开启持久化 --> <property name="persistenceEnabled" value="true"/> </bean> </property> <property name="storagePath" value="work"/> </bean> </property> <property name="discoverySpi"> <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> <property name="ipFinder"> <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder"> <property name="addresses"> <list> <value>10.1.8.186</value> <value>195.168.44.88</value> </list> </property> </bean> </property> </bean> </property> </bean>
新节点启动日志截图

根因定位
厚客户端连接正常仅代表默认10800客户端端口连通,无法证明集群节点间通信链路正常,问题核心原因如下:
- 集群节点间通信端口未双向放行:Ignite节点间集群发现依赖默认
47500/TCP端口,数据同步、分布式请求转发依赖默认47100/TCP端口,这两个端口如果被防火墙、安全组拦截,就会出现节点发现超时。多数场景下运维仅放通了客户端端口,遗漏了节点间内部通信端口。 - 静态发现地址配置不全:旧节点的IP发现列表仅配置了自身地址,没有加入新节点IP。静态IP发现模式要求所有节点的地址列表包含全量集群节点IP,否则旧节点无法响应新节点的加入请求,会一直卡在发现等待阶段。
- 持久化集群基线未更新:两个节点都开启了持久化,Ignite持久化集群激活后会固定基线拓扑,新节点启动后不会自动加入基线,需要手动添加,否则会一直处于待加入状态。
- 隐性校验项:节点间Ignite版本不一致、网卡绑定错误(节点默认绑定了回环地址而非业务IP)、持久化目录权限不足也会导致同类问题。
修复步骤
按顺序操作即可解决:
- 验证端口双向连通性
分别在两个节点服务器上用telnet或nc工具测试对端47500、47100端口的连通性,任意端口不通则先在防火墙、安全组层面放通对应TCP端口,必须保证双向可通。 - 统一全节点发现配置
把旧节点和新节点的TcpDiscoveryVmIpFinder地址列表修改为完全一致,包含两个节点的IP+端口:
修改完成后重启旧节点(持久化开启状态下重启不会丢失数据),再启动新节点。<property name="addresses"> <list> <value>10.1.8.186:47500</value> <value>195.168.44.88:47500</value> </list> </property> - 激活集群并更新基线
两个节点都启动完成后,进入任意节点的bin目录执行以下命令:- 若集群未激活:执行
./control.sh --activate激活集群 - 添加新节点到基线:执行
./control.sh --baseline add rho-1-cache
执行完成后等待1-2分钟,集群会自动完成数据重平衡,新节点即可正常加入。
- 若集群未激活:执行
- 兜底校验
如果以上操作后仍无法加入,检查两个节点的Ignite完整版本号是否完全一致;在配置中为TcpDiscoverySpi和TcpCommunicationSpi显式指定localAddress为节点自身的业务IP,避免绑定回环地址;检查IGNITE_HOME/work目录的读写权限,确保运行进程有完整操作权限。
内容的提问来源于stack exchange,提问作者Justin Mathew
相关产品推荐
相关产品推荐

