Elasticsearch 8.5.3启动失败:存在6.2.3版本不兼容索引求助
问题描述
近期开始使用Elasticsearch 8.5.3版本,现有部分索引分别创建于7.17.0和6.2.3版本。启动Elasticsearch 8.5.3时出现如下错误:
[2023-06-29T02:29:56,936][ERROR][o.e.b.Elasticsearch ] [DESKTOP-PFQE75S] fatal exception while booting Elasticsearchjava.lang.IllegalStateException: cannot upgrade node because incompatible indices created with version [6.2.3] exist, while the minimum compatible index version is [7.0.0]. Upgrade your older indices by reindexing them in version [7.17.0] first. at org.elasticsearch.server@8.5.3/org.elasticsearch.env.NodeEnvironment.checkForIndexCompatibility(NodeEnvironment.java:529) at org.elasticsearch.server@8.5.3/org.elasticsearch.env.NodeEnvironment.upgradeLegacyNodeFolders(NodeEnvironment.java:408) at org.elasticsearch.server@8.5.3/org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:301) at org.elasticsearch.server@8.5.3/org.elasticsearch.node.Node.<init>(Node.java:474) at org.elasticsearch.server@8.5.3/org.elasticsearch.node.Node.<init>(Node.java:318)
请问如何解决该问题?能否临时绕过该兼容性检查?若不能,是否需要重新索引6.x版本的索引?若需要,能否提供相关操作步骤?
解决方案
核心结论
- 不能临时绕过兼容性检查:Elasticsearch 8.x的核心架构不再支持读取6.x版本的索引,强制绕过会直接导致索引损坏、数据丢失,官方也未提供任何绕过机制。
- 必须重新索引6.x版本的索引:需要先在Elasticsearch 7.17.0(7系列最后一个LTS版本,完全兼容6.x索引)中完成6.x索引的重新索引操作,再升级到8.5.3。
具体操作步骤
启动Elasticsearch 7.17.0节点
停止当前8.5.3节点,替换为7.17.0版本启动,确保节点能正常加载现有6.x和7.x索引。识别所有6.x版本的索引
执行以下命令查看所有索引的创建版本:GET _cat/indices?v&h=index,version.created输出中
version.created字段对应索引创建的版本号(例如6.2.3对应编码6020399),标记出所有6.x版本的索引。重新索引每个6.x索引
对每个标记的6.x索引,执行以下两步操作:- 创建目标索引(可复制原索引的映射和设置,或让Elasticsearch自动生成):
PUT /new_target_index { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { // 复制原索引的mapping结构,若不确定可省略,Elasticsearch会自动推断字段类型 } } - 执行重新索引:
POST _reindex { "source": { "index": "old_6x_index" }, "dest": { "index": "new_target_index" } }
- 创建目标索引(可复制原索引的映射和设置,或让Elasticsearch自动生成):
验证数据完整性
对比原索引和新索引的文档数、数据内容,确保无遗漏或错误:# 查看原索引文档数 GET old_6x_index/_count # 查看新索引文档数 GET new_target_index/_count # 随机查询数据对比 GET old_6x_index/_search?size=5 GET new_target_index/_search?size=5升级到Elasticsearch 8.5.3
- 确认所有6.x索引都已完成重新索引并验证无误后,可删除原6.x索引(可选操作):
DELETE /old_6x_index - 停止7.17.0节点,启动8.5.3节点,此时7.x版本的索引(包括刚生成的新索引)会自动完成兼容性升级,节点可正常启动。
- 确认所有6.x索引都已完成重新索引并验证无误后,可删除原6.x索引(可选操作):
内容的提问来源于stack exchange,提问作者Achyut Muley
相关产品推荐
相关产品推荐

