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'