未割り当てのシャードの診断
シャードが未割り当てになる理由は、設定の誤りからディスクスペースの不足まで、さまざまです。
デプロイメント内の未割り当てのシャードを診断するには、次の手順に従ってください:
未割り当てのシャードを診断するには、次の手順に従ってください:
Kibanaを使用する
- 1. Elastic Cloudコンソールにログインします。
- 2. Elasticsearchサービスパネルで、デプロイメントの名前をクリックします。
デプロイメントの名前が無効になっている場合、Kibanaインスタンスが正常でない可能性があります。その場合は、Elasticサポートにお問い合わせください。デプロイメントにKibanaが含まれていない場合は、最初に有効にするだけで済みます。 - 3. デプロイメントのサイドナビゲーションメニュー(左上のElasticロゴの下に配置されています)を開き、**Dev Tools
Console**に移動します。
- 4. cat shards APIを使用して未割り当てのシャードを表示します。
Python
resp = client.cat.shards(
v=True,
h="index,shard,prirep,state,node,unassigned.reason",
s="state",
)
print(resp)
Ruby
response = client.cat.shards(
v: true,
h: 'index,shard,prirep,state,node,unassigned.reason',
s: 'state'
)
puts response
Js
const response = await client.cat.shards({
v: "true",
h: "index,shard,prirep,state,node,unassigned.reason",
s: "state",
});
console.log(response);
Console
GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state
Console-Result
[
{
"index": "my-index-000001",
"shard": "0",
"prirep": "p",
"state": "UNASSIGNED",
"node": null,
"unassigned.reason": "INDEX_CREATED"
}
]
未割り当てのシャードは、state
がUNASSIGNED
です。prirep
の値は、プライマリシャードの場合はp
、レプリカの場合はr
です。
例のインデックスには、未割り当てのプライマリシャードがあります。
- 5. 未割り当てのシャードが割り当てられない理由と、Elasticsearchがそれを割り当てるために取るべきアクションを理解するには、クラスタ割り当て説明APIを使用します。
Python
resp = client.cluster.allocation_explain(
index="my-index-000001",
shard=0,
primary=True,
)
print(resp)
Ruby
response = client.cluster.allocation_explain(
body: {
index: 'my-index-000001',
shard: 0,
primary: true
}
)
puts response
Js
const response = await client.cluster.allocationExplain({
index: "my-index-000001",
shard: 0,
primary: true,
});
console.log(response);
Console
GET _cluster/allocation/explain
{
"index": "my-index-000001",
"shard": 0,
"primary": true
}
診断したいインデックス。 | |
未割り当てのシャードID。 | |
プライマリシャードを診断していることを示します。 |
Console-Result
{
"index" : "my-index-000001",
"shard" : 0,
"primary" : true,
"current_state" : "unassigned",
"unassigned_info" : {
"reason" : "INDEX_CREATED",
"at" : "2022-01-04T18:08:16.600Z",
"last_allocation_status" : "no"
},
"can_allocate" : "no",
"allocate_explanation" : "Elasticsearch isn't allowed to allocate this shard to any of the nodes in the cluster. Choose a node to which you expect this shard to be allocated, find this node in the node-by-node explanation, and address the reasons which prevent Elasticsearch from allocating this shard there.",
"node_allocation_decisions" : [
{
"node_id" : "8qt2rY-pT6KNZB3-hGfLnw",
"node_name" : "node-0",
"transport_address" : "127.0.0.1:9401",
"roles": ["data_content", "data_hot"],
"node_attributes" : {},
"node_decision" : "no",
"weight_ranking" : 1,
"deciders" : [
{
"decider" : "filter",
"decision" : "NO",
"explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
}
]
}
]
}
シャードの現在の状態。 | |
シャードが元々未割り当てになった理由。 | |
シャードを割り当てるかどうか。 | |
特定のノードにシャードを割り当てるかどうか。 | |
ノードのno 決定を導いた決定者。 |
|
決定者がno 決定を返した理由の説明、決定に至った設定を指摘する役立つヒント。 |
- 6. この場合の説明は、インデックス割り当ての設定が正しくないことを示しています。割り当て設定を確認するには、インデックス設定の取得およびクラスタ設定の取得 APIを使用します。
Python
resp = client.indices.get_settings(
index="my-index-000001",
flat_settings=True,
include_defaults=True,
)
print(resp)
resp1 = client.cluster.get_settings(
flat_settings=True,
include_defaults=True,
)
print(resp1)
Ruby
response = client.indices.get_settings(
index: 'my-index-000001',
flat_settings: true,
include_defaults: true
)
puts response
response = client.cluster.get_settings(
flat_settings: true,
include_defaults: true
)
puts response
Js
const response = await client.indices.getSettings({
index: "my-index-000001",
flat_settings: "true",
include_defaults: "true",
});
console.log(response);
const response1 = await client.cluster.getSettings({
flat_settings: "true",
include_defaults: "true",
});
console.log(response1);
Console
GET my-index-000001/_settings?flat_settings=true&include_defaults=true
GET _cluster/settings?flat_settings=true&include_defaults=true
- 7. update index settingsおよびcluster update settings APIを使用して、インデックスが割り当てられるように正しい値に設定を変更します。
未割り当てのシャードの最も一般的な原因を修正するための詳細なガイダンスについては、このガイドを参照するか、Elasticサポートにお問い合わせください。
未割り当てのシャードを診断するには、次の手順に従ってください:
- 1. cat shards APIを使用して未割り当てのシャードを表示します。
Python
resp = client.cat.shards(
v=True,
h="index,shard,prirep,state,node,unassigned.reason",
s="state",
)
print(resp)
Ruby
response = client.cat.shards(
v: true,
h: 'index,shard,prirep,state,node,unassigned.reason',
s: 'state'
)
puts response
Js
const response = await client.cat.shards({
v: "true",
h: "index,shard,prirep,state,node,unassigned.reason",
s: "state",
});
console.log(response);
Console
GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state
Console-Result
[
{
"index": "my-index-000001",
"shard": "0",
"prirep": "p",
"state": "UNASSIGNED",
"node": null,
"unassigned.reason": "INDEX_CREATED"
}
]
未割り当てのシャードは、state
がUNASSIGNED
です。prirep
の値は、プライマリシャードの場合はp
、レプリカの場合はr
です。
例のインデックスには、未割り当てのプライマリシャードがあります。
- 2. 未割り当てのシャードが割り当てられない理由と、Elasticsearchがそれを割り当てるために取るべきアクションを理解するには、クラスタ割り当て説明APIを使用します。
Python
resp = client.cluster.allocation_explain(
index="my-index-000001",
shard=0,
primary=True,
)
print(resp)
Ruby
response = client.cluster.allocation_explain(
body: {
index: 'my-index-000001',
shard: 0,
primary: true
}
)
puts response
Js
const response = await client.cluster.allocationExplain({
index: "my-index-000001",
shard: 0,
primary: true,
});
console.log(response);
Console
GET _cluster/allocation/explain
{
"index": "my-index-000001",
"shard": 0,
"primary": true
}
診断したいインデックス。 | |
未割り当てのシャードID。 | |
プライマリシャードを診断していることを示します。 |
Console-Result
{
"index" : "my-index-000001",
"shard" : 0,
"primary" : true,
"current_state" : "unassigned",
"unassigned_info" : {
"reason" : "INDEX_CREATED",
"at" : "2022-01-04T18:08:16.600Z",
"last_allocation_status" : "no"
},
"can_allocate" : "no",
"allocate_explanation" : "Elasticsearch isn't allowed to allocate this shard to any of the nodes in the cluster. Choose a node to which you expect this shard to be allocated, find this node in the node-by-node explanation, and address the reasons which prevent Elasticsearch from allocating this shard there.",
"node_allocation_decisions" : [
{
"node_id" : "8qt2rY-pT6KNZB3-hGfLnw",
"node_name" : "node-0",
"transport_address" : "127.0.0.1:9401",
"roles": ["data_content", "data_hot"]
"node_attributes" : {},
"node_decision" : "no",
"weight_ranking" : 1,
"deciders" : [
{
"decider" : "filter",
"decision" : "NO",
"explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
}
]
}
]
}
シャードの現在の状態。 | |
シャードが元々未割り当てになった理由。 | |
シャードを割り当てるかどうか。 | |
特定のノードにシャードを割り当てるかどうか。 | |
ノードのno 決定を導いた決定者。 |
|
決定者がno 決定を返した理由の説明、決定に至った設定を指摘する役立つヒント。 |
- 3. この場合の説明は、インデックス割り当ての設定が正しくないことを示しています。割り当て設定を確認するには、インデックス設定の取得およびクラスタ設定の取得 APIを使用します。
Python
resp = client.indices.get_settings(
index="my-index-000001",
flat_settings=True,
include_defaults=True,
)
print(resp)
resp1 = client.cluster.get_settings(
flat_settings=True,
include_defaults=True,
)
print(resp1)
Ruby
response = client.indices.get_settings(
index: 'my-index-000001',
flat_settings: true,
include_defaults: true
)
puts response
response = client.cluster.get_settings(
flat_settings: true,
include_defaults: true
)
puts response
Js
const response = await client.indices.getSettings({
index: "my-index-000001",
flat_settings: "true",
include_defaults: "true",
});
console.log(response);
const response1 = await client.cluster.getSettings({
flat_settings: "true",
include_defaults: "true",
});
console.log(response1);
Console
GET my-index-000001/_settings?flat_settings=true&include_defaults=true
GET _cluster/settings?flat_settings=true&include_defaults=true
- 4. update index settingsおよびcluster update settings APIを使用して、インデックスが割り当てられるように正しい値に設定を変更します。
未割り当てのシャードの最も一般的な原因を修正するための詳細なガイダンスについては、このガイドを参照してください。