文档首页/
MapReduce服务 MRS/
组件操作指南(安卡拉区域)/
使用Elasticsearch/
Elasticsearch常见问题/
Elasticsearch分片down(unassigned shard)常用处理方式
更新时间:2024-11-29 GMT+08:00
Elasticsearch分片down(unassigned shard)常用处理方式
问题背景与现象
Elasticsearch集群报错“Elasticsearch实例存在down状态的主分片”或“Elasticsearch实例存在down状态的副本分片”。
处理步骤
- 登录任意EsNode节点,执行如下命令查看down分片以及原因,其中unassigned.reason列内容指的是unassigned原因。
curl -XGET --tlsv1.2 --negotiate -k -u : "https://ip:httpport/_cat/shards/indexname?v&h=index,shard,prirep,state,node,unassigned.reason" | grep UNASSIGNED
- 分片unassigned的原因包括:
- INDEX_CREATED:由于创建索引的API导致未分配。
- CLUSTER_RECOVERED:由于完全集群恢复导致未分配。
- INDEX_REOPENED:由于打开或关闭一个索引导致未分配。
- DANGLING_INDEX_IMPORTED:由于导入dangling索引的结果导致未分配。
- NEW_INDEX_RESTORED:由于从快照恢复到新索引导致未分配。
- EXISTING_INDEX_RESTORED:由于从快照恢复到已关闭的索引导致未分配。
- REPLICA_ADDED:由于显式添加副本分片导致未分配。
- ALLOCATION_FAILED:由于分片分配失败导致未分配。
- NODE_LEFT:由于承载该分片的节点离开集群导致未分配。
- REINITIALIZED:由于当分片从开始移动到初始化时导致未分配(例如,使用影子shadow副本分片)。
- REROUTE_CANCELLED:作为显式取消重新路由命令的结果取消分配。
- REALLOCATED_REPLICA:确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。
- 若unassigned.reason为“ALLOCATION_FAILED”,可以尝试手动重新分片,命令如下:
curl -XPOST --tlsv1.2 --negotiate -k -u : "https://ip:httpport/_cluster/reroute?retry_failed=true"
- 执行解释API查看分片unassigned的详细原因, 请求中的三个参数可以在步骤1执行命令结果中查询到,第一列为索引名称,第二列为分片编号,第三列为是否是主分片。
curl -XGET --tlsv1.2 --negotiate -k -u : "https://ip:httpport/_cluster/allocation/explain?pretty" -H 'Content-Type:application/json' -d '{ "index": "indexname", "shard": shardId, "primary": isPrimary }'
- “indexname”:_cat/shards命令查询结果中第一列的索引名称。
- “shardId”:_cat/shards命令查询结果中第二列的分片编号。
- “isPrimary”:表明要查询的分片是主还是副本。如果_cat/shards命令查询结果中第三列的值为p,说明是主分片,填true,否则是副本分片,填false。
- 分析explain命令的输出结果,若输出结果中包含"explanation"字段,查看该字段内容是否有推荐处理方式。如果有推荐修复方式,优先执行。
- 分析1cat/shards命令中处于UNASSIGNED状态的分片是否集中在少数几个EsNode实例,如果是,可以尝试单独重启这几个Elasticsearch实例,触发分片再次恢复。
父主题: Elasticsearch常见问题