You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移旧AKS集群Ignite持久化文件到新集群后TcpDiscoverySpi启动失败

Ignite缓存配置合并冲突故障排查与解决方案

故障现象

在版本为1.20.9的新Azure Kubernetes集群中部署2个Ignite 2.8.1实例,初始运行状态均正常。从版本为1.18.10的旧Kubernetes集群中迁移同版本Ignite的持久化dat、bin文件到新集群后,其中一个Ignite实例持续启动失败,另一个可正常运行,旧集群的2个Ignite 2.8.1实例始终运行无异常。
启动失败实例抛出的核心异常如下:

[IgniteKernal] Failed to start manager: GridManagerAdapter [enabled=true, name=o.a.i.i.managers.discovery.GridDiscoveryManager]
class org.apache.ignite.IgniteCheckedException: Failed to start SPI: TcpDiscoverySpi [addrRslvr=null, sockTimeout=5000, ackTimeout=5000, marsh=JdkMarshaller [clsFilter=org.apache.ignite.marshaller.MarshallerUtils$1@101cf747], reconCnt=10, reconDelay=2000, maxAckTimeout=600000, soLinger=5, forceSrvMode=false, clientReconnectDisabled=false, internalLsnr=null, skipAddrsRandomization=false]
...
Caused by: class org.apache.ignite.spi.IgniteSpiException: Conflicts during configuration merge for cache

排查步骤

  • 校验迁移文件完整性:对比旧集群中故障实例对应持久化文件的哈希值,确认迁移过程中无文件损坏、缺失,同时检查新集群中持久化卷的文件权限,确保Ignite运行用户对dat、bin文件有读写权限
  • 对比实例运行配置:检查两个新实例的启动配置(xml配置文件、环境变量传入参数),确认故障实例和正常实例的缓存配置(缓存名称、副本数、持久化开关、过期策略、内存配额等)完全一致,且和旧集群原有配置无差异
  • 验证集群网络连通性:确认新AKS集群中两个Ignite Pod之间的TcpDiscovery默认端口47500、内部通信默认端口47100可正常访问,无网络策略、NSG规则拦截
  • 对比缓存元数据配置:使用Ignite自带的control.sh工具执行./control.sh --cache config <缓存名>指令,对比故障实例本地持久化的缓存元数据和启动加载的配置、正常实例的缓存配置是否存在冲突项
  • 检查节点ID冲突:确认迁移后两个新实例的节点ID无重复,也没有和旧集群残留的节点ID冲突

修复方案

  • 若为迁移文件损坏/权限问题:重新从旧集群导出对应实例的持久化文件,调整文件权限后重新挂载启动
  • 若为配置不一致问题:统一两个实例的启动配置,删除故障实例持久化目录下work/binary_meta、work/marshaller两个缓存目录后重启,让实例从正常运行的对等节点同步元数据完成配置合并
  • 若为网络连通性问题:调整AKS网络策略和NSG规则,放行Ignite所需的全部通信端口,确保TcpDiscoverySpi可正常发现对等节点
  • 若以上方案无效:先保持单个正常实例运行,清空故障实例的持久化目录,将其作为全新节点加入集群,等待Ignite自动完成数据再平衡即可,可避免手动迁移文件带来的配置冲突

内容的提问来源于stack exchange,提问作者achowdhury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:04