ES分片UNASSIGNED解决方案
背景
线上集群为3台阿里云机器,其中一台突然宕机,修复之后重启,有一个索引的分片在重启机器上,结果一直无法进行分配,导致整个集群健康状态为Yellow
问题处理
- 在kibana上使用 GET /_cat/shards?index=video_portrayal_platform 命令,查看索引分片状态
可以发现明显有一个分片是UNASSIGNED状态
- 在Elasticsearch Head 上点击灰色的分片,可以查看该分片的详细信息,通过观察可以发现,问题的原因是:ALLOCATION_FAILED
根据官方的解释有如下:
- INDEX_CREATED:由于创建索引的API导致未分配。
- CLUSTER_RECOVERED :由于完全集群恢复导致未分配。
- INDEX_REOPENED :由于打开open或关闭close一个索引导致未分配。
- DANGLING_INDEX_IMPORTED :由于导入dangling索引的结果导致未分配。
- NEW_INDEX_RESTORED :由于恢复到新索引导致未分配。
- EXISTING_INDEX_RESTORED :由于恢复到已关闭的索引导致未分配。
- REPLICA_ADDED:由于显式添加副本分片导致未分配。
- ALLOCATION_FAILED :由于分片分配失败导致未分配。
- NODE_LEFT :由于承载该分片的节点离开集群导致未分配。
- REINITIALIZED :由于当分片从开始移动到初始化时导致未分配(例如,使用影子shadow副本分片)。
- REROUTE_CANCELLED :作为显式取消重新路由命令的结果取消分配。
- REALLOCATED_REPLICA :确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。
- 知道原因为ALLOCATION_FAILED也没啥能具体定位问题的描述,所以可以在kibana上执行 GET /_cluster/allocation/explain ,返回未分配索引每个分片的详情和未分配的原因
可以查看我的具体原因如下:
查看explanation可以看出问题的原因是已经达到了最大的尝试分配次数,所以分配失败了,而且给出了解决方案,即执行 POST /_cluster/reroute?retry_failed=true 可以解决问题,感兴趣也可以查看官网:www.elastic.co/guide/en/el…
tips:可以执行GET _cluster/health,实时监控集群状态,以及问题处理进度
总结
观察上面的官方总结,可以看出会存在不同的问题,但是解决方案都可以参考这种去处理