更新时间:2024-11-29 GMT+08:00

Elasticsearch分片down(unassigned shard)常用处理方式

问题背景与现象

Elasticsearch集群报错“Elasticsearch实例存在down状态的主分片”或“Elasticsearch实例存在down状态的副本分片”。

处理步骤

  1. 登录任意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

    • ip:Elasticsearch集群中任意EsNode节点的IP。
    • httpport:Elasticsearch实例的HTTP端口,该端口值可以在Manager界面的待操作集群的Elasticsearch服务下,选择该服务的“配置”,选择“全部配置”,右上角搜索参数“SERVER_PORT”获取。请使用EsNodeX实例的端口进行访问。

    • indexname:待查询分片列表的索引名称。

  1. 分片unassigned的原因包括:

    1. INDEX_CREATED:由于创建索引的API导致未分配。
    2. CLUSTER_RECOVERED:由于完全集群恢复导致未分配。
    3. INDEX_REOPENED:由于打开或关闭一个索引导致未分配。
    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:确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。

  1. 若unassigned.reason为“ALLOCATION_FAILED”,可以尝试手动重新分片,命令如下:

    curl -XPOST --tlsv1.2 --negotiate -k  -u :  "https://ip:httpport/_cluster/reroute?retry_failed=true"

  1. 执行解释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。

  1. 分析explain命令的输出结果,若输出结果中包含"explanation"字段,查看该字段内容是否有推荐处理方式。如果有推荐修复方式,优先执行。
  2. 分析1cat/shards命令中处于UNASSIGNED状态的分片是否集中在少数几个EsNode实例,如果是,可以尝试单独重启这几个Elasticsearch实例,触发分片再次恢复。