Elasticsearch别名存在多个写入索引的理想恢复方法咨询
Elasticsearch 6.7.2 别名多写索引启动故障标准恢复方案
故障根因
该错误由分片重分配过程中异常中断导致:部分data节点本地残留了已被集群删除的无效索引的元数据与分片数据,ES启动校验时发现同一个别名关联了两个写索引,其中无效索引已经不存在于master的集群元数据中。
标准恢复操作(无需手动删除节点本地目录)
1. 暂停分片分配,避免恢复过程中节点波动触发二次重分配
PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "none" } }
2. 确认合法写索引
查询集群中正常存在的索引的别名配置,确认哪一个是别名指定的合法写索引:
GET index-abc,_alias/alias-id_100536
返回结果中is_write_index字段为true的即为合法写索引。
3. 清理无效索引残留
- 如果通过API可以查询到另一个无效索引
index-def,直接调用索引删除接口即可:DELETE index-def - 如果master完全查询不到
index-def,说明该索引仅为部分data节点的孤立残留,调用清理过时分配记录的API即可:POST _cluster/reroute?pretty { "commands": [ { "clear_stale_allocations": { "index": "index-def", "allow_primary": true } } ] }
4. 校验别名配置
确认当前别名仅关联一个写索引:
GET _alias/alias-id_100536
返回结果中应仅包含1个索引,且is_write_index值为true。
5. 恢复分片分配,重启故障节点
PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "all" } }
逐个重启启动失败的data节点Pod即可,节点启动后会自动与master同步元数据,清理本地残留的无效索引数据。
注意事项
- 6.7.2版本原生支持
clear_stale_allocationsAPI,无需手动登录底层VM删除PV目录,避免误删有效数据 - 操作前建议先对集群元数据做快照备份,规避操作风险
- 该方案不会造成数据丢失,清理完成后集群会自动将分片恢复到预期副本数
内容的提问来源于stack exchange,提问作者Anirudh Panchangam
相关产品推荐
相关产品推荐

