Cluster Allocation Explain API
原文链接 : 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 的目的是帮助回答这个问题 “为什么这个分片没有被分配”。为了说明分片的分配(未分配状态),发出一个这样的请求 :
$ curl -XGET 'http://localhost:9200/_cluster/allocation/explain' -d'{"index": "myindex","shard": 0,"primary": false}'
指定您希望查看的说明的 index 和 shard 的 id,和 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\"]"} ]}}}
对于一个已经分配的分片来说,输出与下面相似 :
{"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\"]"} ]}}}
| 编号 | 描述 |
|---|---|
![]() |
Node the shard is currently assigned to |
![]() |
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'










