Elasticsearch单节点新集群恢复快照遇.geoip_databases索引冲突如何解决
问题原因
Elasticsearch 7.14版本默认启用了GeoIP处理器功能,集群启动后会自动创建.geoip_databases系统索引存储GeoIP数据库文件,你快照中包含了同名的系统索引,恢复时和新集群已自动生成的索引产生冲突,才触发该报错。
你之前添加的include_global_state: false和空feature_states参数未生效,是因为这两个参数仅控制全局集群状态、功能状态的恢复逻辑,默认恢复规则还是会导入快照中所有的普通索引和系统索引,所以冲突仍然存在。
解决方案
以下三种方案可按需选择:
方案1:恢复时排除冲突系统索引
适合仅需要恢复业务索引的场景,不需要改动现有集群配置或删除索引,直接在恢复请求中指定排除.geoip_databases即可:
POST /_snapshot/backup/snapshot-2021.09.23/_restore { "indices": "*,-.geoip_databases", "include_global_state": false }
indices参数里*代表匹配所有索引,-.geoip_databases代表排除该系统索引,恢复后新集群会继续使用自身生成的.geoip_databases索引,不影响正常功能使用。
方案2:删除冲突索引后立即恢复
如果需要完整恢复快照中的.geoip_databases索引,可以先删除新集群中已存在的同名索引,再执行恢复操作:
- 先删除现有冲突索引:
DELETE /.geoip_databases
- 删除后立刻执行恢复命令即可。
注意该索引删除后Elasticsearch会自动重建,所以删除操作完成后需要立刻执行恢复,避免集群重新生成索引再次触发冲突。
方案3:禁用GeoIP自动下载功能后再恢复
你提到的「在系统索引创建前完成快照恢复」是可实现的,修改elasticsearch.yml配置文件,添加以下配置:
ingest.geoip.downloader.enabled: false
重启集群后Elasticsearch不会自动创建.geoip_databases索引,此时执行恢复操作不会出现冲突。恢复完成后如果需要使用GeoIP功能,把该配置改回true重启集群即可。
内容的提问来源于stack exchange,提问作者cdalxndr
相关产品推荐
相关产品推荐

