原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/5.0/cluster-allocation-explain.html

    译文链接 : http://www.apache.wiki/display/Elasticsearch/Cluster+Allocation+Explain+API

    贡献者 : 那伊抹微笑

    cluster allocation explanation API 的目的是帮助回答这个问题 “为什么这个分片没有被分配”。为了说明分片的分配(未分配状态),发出一个这样的请求 :

    1. $ curl -XGET 'http://localhost:9200/_cluster/allocation/explain' -d'{
    2. "index": "myindex",
    3. "shard": 0,
    4. "primary": false
    5. }'

    指定您希望查看的说明的 indexshardid,和 primary 标记一样来指出是否 explain 一个主或者副本分片。

    该响应如下 :

    {
      "shard" : {
        "index" : "myindex",
        "index_uuid" : "KnW0-zELRs6PK84l0r38ZA",
        "id" : 0,
        "primary" : false
      },
      "assigned" : false,                             ①
      "shard_state_fetch_pending": false,             ②
      "unassigned_info" : {
        "reason" : "INDEX_CREATED",                   ③
        "at" : "2016-03-22T20:04:23.620Z"
      },
      "allocation_delay_ms" : 0,                      ④
      "remaining_delay_ms" : 0,                       ⑤
      "nodes" : {
        "V-Spi0AyRZ6ZvKbaI3691w" : {
          "node_name" : "H5dfFeA",
          "node_attributes" : {                       ⑥
            "bar" : "baz"
          },
          "store" : {
            "shard_copy" : "NONE"                     ⑦
          },
          "final_decision" : "NO",                    ⑧
          "final_explanation" : "the shard cannot be assigned because one or more allocation decider returns a 'NO' decision",
          "weight" : 0.06666675,                      ⑨
          "decisions" : [ {                           ⑩
            "decider" : "filter",
            "decision" : "NO",
            "explanation" : "node does not match index include filters [foo:\"bar\"]"
          } ]
        },
        "Qc6VL8c5RWaw1qXZ0Rg57g" : {
          "node_name" : "bGG90GE",
          "node_attributes" : {
            "bar" : "baz",
            "foo" : "bar"
          },
          "store" : {
            "shard_copy" : "AVAILABLE"
          },
          "final_decision" : "NO",
          "final_explanation" : "the shard cannot be assigned because one or more allocation decider returns a 'NO' decision",
          "weight" : -1.3833332,
          "decisions" : [ {
            "decider" : "same_shard",
            "decision" : "NO",
            "explanation" : "the shard cannot be allocated on the same node id [Qc6VL8c5RWaw1qXZ0Rg57g] on which it already exists"
          } ]
        },
        "PzdyMZGXQdGhqTJHF_hGgA" : {
          "node_name" : "DKDM97B",
          "node_attributes" : { },
          "store" : {
            "shard_copy" : "NONE"
          },
          "final_decision" : "NO",
          "final_explanation" : "the shard cannot be assigned because one or more allocation decider returns a 'NO' decision",
          "weight" : 2.3166666,
          "decisions" : [ {
            "decider" : "filter",
            "decision" : "NO",
            "explanation" : "node does not match index include filters [foo:\"bar\"]"
          } ]
        }
      }
    }
    
    编号 描述
    Cluster Allocation Explain API - 图1 Whether the shard is assigned or unassigned
    Cluster Allocation Explain API - 图2 Whether information about the shard is still being fetched
    Cluster Allocation Explain API - 图3 Reason for the shard originally becoming unassigned
    Cluster Allocation Explain API - 图4 Configured delay before the shard can be allocated
    Cluster Allocation Explain API - 图5 Remaining delay before the shard can be allocated
    Cluster Allocation Explain API - 图6 User-added attributes the node has
    Cluster Allocation Explain API - 图7 The shard copy information for this node and error (if applicable)
    Cluster Allocation Explain API - 图8 Final decision and explanation of whether the shard can be allocated to this node
    Cluster Allocation Explain API - 图9 Weight for how much the allocator would like to allocate the shard to this node
    Cluster Allocation Explain API - 图10 List of node decisions factoring into final decision about the shard

    对于一个已经分配的分片来说,输出与下面相似 :

    {
      "shard" : {
        "index" : "only-foo",
        "index_uuid" : "KnW0-zELRs6PK84l0r38ZA",
        "id" : 0,
        "primary" : true
      },
      "assigned" : true,
      "assigned_node_id" : "Qc6VL8c5RWaw1qXZ0Rg57g",      ①
      "shard_state_fetch_pending": false,
      "allocation_delay_ms" : 0,
      "remaining_delay_ms" : 0,
      "nodes" : {
        "V-Spi0AyRZ6ZvKbaI3691w" : {
          "node_name" : "bGG90GE",
          "node_attributes" : {
            "bar" : "baz"
          },
          "store" : {
            "shard_copy" : "NONE"
          },
          "final_decision" : "NO",
          "final_explanation" : "the shard cannot be assigned because one or more allocation decider returns a 'NO' decision",
          "weight" : 1.4499999,
          "decisions" : [ {
            "decider" : "filter",
            "decision" : "NO",
            "explanation" : "node does not match index include filters [foo:\"bar\"]"
          } ]
        },
        "Qc6VL8c5RWaw1qXZ0Rg57g" : {
          "node_name" : "I8hydUG",
          "node_attributes" : {
            "bar" : "baz",
            "foo" : "bar"
          },
          "store" : {
            "shard_copy" : "AVAILABLE"
          },
          "final_decision" : "ALREADY_ASSIGNED",        ②
          "final_explanation" : "the shard is already assigned to this node",
          "weight" : 0.0,
          "decisions" : [ {
            "decider" : "same_shard",
            "decision" : "NO",
            "explanation" : "the shard cannot be allocated on the same node id [Qc6VL8c5RWaw1qXZ0Rg57g] on which it already exists"
          } ]
        },
        "PzdyMZGXQdGhqTJHF_hGgA" : {
          "node_name" : "H5dfFeA",
          "node_attributes" : { },
          "store" : {
            "shard_copy" : "NONE"
          },
          "final_decision" : "NO",
          "final_explanation" : "the shard cannot be assigned because one or more allocation decider returns a 'NO' decision",
          "weight" : 3.6999998,
          "decisions" : [ {
            "decider" : "filter",
            "decision" : "NO",
            "explanation" : "node does not match index include filters [foo:\"bar\"]"
          } ]
        }
      }
    }
    
    编号 描述
    Cluster Allocation Explain API - 图11 Node the shard is currently assigned to
    Cluster Allocation Explain API - 图12 The decision is “ALREADY_ASSIGNED” because the shard is currently assigned to this node

    您也可以让 Elasticsearch explain 第一个未分配分片的分配情况,它可以通过发送一个空的 body 来找到,例如 :

    $ curl -XGET 'http://localhost:9200/_cluster/allocation/explain'
    

    如果您想要去包含所有的那些我们考虑到的最终的决策的决定,该 include_yes_decisions 参数将返回所有的决策 :

    $ curl -XGET 'http://localhost:9200/_cluster/allocation/explain?include_yes_decisions=true'
    

    此外,通过设置 include_disk_info参数为 true,您可以返回通过集群信息服务返回收集到的信息,包括硬盘使用和分配大小。

    $ curl -XGET 'http://localhost:9200/_cluster/allocation/explain?include_disk_info=true'