Elasticsearch分片UNASSIGNED解决方案

1,935 阅读2分钟

ES分片UNASSIGNED解决方案

背景

线上集群为3台阿里云机器,其中一台突然宕机,修复之后重启,有一个索引的分片在重启机器上,结果一直无法进行分配,导致整个集群健康状态为Yellow

问题处理

  • 在kibana上使用 GET /_cat/shards?index=video_portrayal_platform 命令,查看索引分片状态

截屏2021-09-06 上午10.09.10.png 可以发现明显有一个分片是UNASSIGNED状态

  • 在Elasticsearch Head 上点击灰色的分片,可以查看该分片的详细信息,通过观察可以发现,问题的原因是:ALLOCATION_FAILED

截屏2021-09-04 上午1.54.33.png

根据官方的解释有如下:

  1. INDEX_CREATED:由于创建索引的API导致未分配。
  2. CLUSTER_RECOVERED :由于完全集群恢复导致未分配。
  3. INDEX_REOPENED :由于打开open或关闭close一个索引导致未分配。
  4. DANGLING_INDEX_IMPORTED :由于导入dangling索引的结果导致未分配。
  5. NEW_INDEX_RESTORED :由于恢复到新索引导致未分配。
  6. EXISTING_INDEX_RESTORED :由于恢复到已关闭的索引导致未分配。
  7. REPLICA_ADDED:由于显式添加副本分片导致未分配。
  8. ALLOCATION_FAILED :由于分片分配失败导致未分配。
  9. NODE_LEFT :由于承载该分片的节点离开集群导致未分配。
  10. REINITIALIZED :由于当分片从开始移动到初始化时导致未分配(例如,使用影子shadow副本分片)。
  11. REROUTE_CANCELLED :作为显式取消重新路由命令的结果取消分配。
  12. REALLOCATED_REPLICA :确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。
  • 知道原因为ALLOCATION_FAILED也没啥能具体定位问题的描述,所以可以在kibana上执行 GET /_cluster/allocation/explain ,返回未分配索引每个分片的详情和未分配的原因

可以查看我的具体原因如下:

截屏2021-09-06 上午9.59.14.png 查看explanation可以看出问题的原因是已经达到了最大的尝试分配次数,所以分配失败了,而且给出了解决方案,即执行 POST /_cluster/reroute?retry_failed=true 可以解决问题,感兴趣也可以查看官网:www.elastic.co/guide/en/el…

tips:可以执行GET _cluster/health,实时监控集群状态,以及问题处理进度

总结

观察上面的官方总结,可以看出会存在不同的问题,但是解决方案都可以参考这种去处理