Ignite从2.7升级至2.11启动报ZkDiscoveryNodeFailEventData类未找到求助
Ignite 2.7升级至2.11启动报ClassNotFoundException问题解决方案
根因定位
该错误由跨版本序列化不兼容触发,具体原因如下:
- 报错提示缺少的
org.apache.ignite.spi.discovery.zk.internal.ZkDiscoveryNodeFailEventData是Ignite 2.7版本ZK发现模块的内部类,在2.11版本中已经被重构移除 - 从异常栈的
JdkMarshaller.unmarshal0调用可以判断,2.11版本进程启动时正在反序列化2.7版本遗留的持久化数据/ZK集群中存储的旧版本集群元数据,找不到对应类就抛出类未找到异常 - 仅替换安装包未清理旧版本残留数据是触发问题的直接原因
修复步骤
- 停止整个Ignite集群的所有节点进程
- 清理所有节点本地的Ignite持久化工作目录(默认路径为
$IGNITE_HOME/work,如果自定义过工作目录就清理自定义路径),同时清理ZK集群上对应Ignite集群的注册根节点 - 检查所有节点是否存在2.7版本的旧jar包残留,可执行命令
find $IGNITE_HOME -name "*.jar" | grep 2.7排查,如果有残留直接删除 - 如果集群有业务数据不能直接清理持久化目录,需要先从2.7版本集群导出全量快照,2.11集群部署完成后再导入快照完成数据迁移
- 逐一重启所有Ignite节点即可正常启动
注意:Ignite跨多个大版本升级时,官方不支持直接原地替换安装包的升级方式,必须清理旧版本元数据或者走快照迁移流程,避免类定义、序列化协议不兼容导致的启动失败问题。
内容的提问来源于stack exchange,提问作者Brook
相关产品推荐
相关产品推荐

