未割り当てのシャードの診断

シャードが未割り当てになる理由は、設定の誤りからディスクスペースの不足まで、さまざまです。

デプロイメント内の未割り当てのシャードを診断するには、次の手順に従ってください:

未割り当てのシャードを診断するには、次の手順に従ってください:

Kibanaを使用する

  • 1. Elastic Cloudコンソールにログインします。
  • 2. Elasticsearchサービスパネルで、デプロイメントの名前をクリックします。
    デプロイメントの名前が無効になっている場合、Kibanaインスタンスが正常でない可能性があります。その場合は、Elasticサポートにお問い合わせください。デプロイメントにKibanaが含まれていない場合は、最初に有効にするだけで済みます。
  • 3. デプロイメントのサイドナビゲーションメニュー(左上のElasticロゴの下に配置されています)を開き、**Dev Tools

    Console**に移動します。
    Kibana Console

  • 4. cat shards APIを使用して未割り当てのシャードを表示します。

Python

  1. resp = client.cat.shards(
  2. v=True,
  3. h="index,shard,prirep,state,node,unassigned.reason",
  4. s="state",
  5. )
  6. print(resp)

Ruby

  1. response = client.cat.shards(
  2. v: true,
  3. h: 'index,shard,prirep,state,node,unassigned.reason',
  4. s: 'state'
  5. )
  6. puts response

Js

  1. const response = await client.cat.shards({
  2. v: "true",
  3. h: "index,shard,prirep,state,node,unassigned.reason",
  4. s: "state",
  5. });
  6. console.log(response);

Console

  1. GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state

応答は次のようになります:

Console-Result

  1. [
  2. {
  3. "index": "my-index-000001",
  4. "shard": "0",
  5. "prirep": "p",
  6. "state": "UNASSIGNED",
  7. "node": null,
  8. "unassigned.reason": "INDEX_CREATED"
  9. }
  10. ]

未割り当てのシャードは、stateUNASSIGNEDです。prirepの値は、プライマリシャードの場合はp、レプリカの場合はrです。
例のインデックスには、未割り当てのプライマリシャードがあります。

  • 5. 未割り当てのシャードが割り当てられない理由と、Elasticsearchがそれを割り当てるために取るべきアクションを理解するには、クラスタ割り当て説明APIを使用します。

Python

  1. resp = client.cluster.allocation_explain(
  2. index="my-index-000001",
  3. shard=0,
  4. primary=True,
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.allocation_explain(
  2. body: {
  3. index: 'my-index-000001',
  4. shard: 0,
  5. primary: true
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.allocationExplain({
  2. index: "my-index-000001",
  3. shard: 0,
  4. primary: true,
  5. });
  6. console.log(response);

Console

  1. GET _cluster/allocation/explain
  2. {
  3. "index": "my-index-000001",
  4. "shard": 0,
  5. "primary": true
  6. }
診断したいインデックス。
未割り当てのシャードID。
プライマリシャードを診断していることを示します。

応答は次のようになります:

Console-Result

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : true,
  5. "current_state" : "unassigned",
  6. "unassigned_info" : {
  7. "reason" : "INDEX_CREATED",
  8. "at" : "2022-01-04T18:08:16.600Z",
  9. "last_allocation_status" : "no"
  10. },
  11. "can_allocate" : "no",
  12. "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.",
  13. "node_allocation_decisions" : [
  14. {
  15. "node_id" : "8qt2rY-pT6KNZB3-hGfLnw",
  16. "node_name" : "node-0",
  17. "transport_address" : "127.0.0.1:9401",
  18. "roles": ["data_content", "data_hot"],
  19. "node_attributes" : {},
  20. "node_decision" : "no",
  21. "weight_ranking" : 1,
  22. "deciders" : [
  23. {
  24. "decider" : "filter",
  25. "decision" : "NO",
  26. "explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
  27. }
  28. ]
  29. }
  30. ]
  31. }
シャードの現在の状態。
シャードが元々未割り当てになった理由。
シャードを割り当てるかどうか。
特定のノードにシャードを割り当てるかどうか。
ノードのno決定を導いた決定者。
決定者がno決定を返した理由の説明、決定に至った設定を指摘する役立つヒント。

Python

  1. resp = client.indices.get_settings(
  2. index="my-index-000001",
  3. flat_settings=True,
  4. include_defaults=True,
  5. )
  6. print(resp)
  7. resp1 = client.cluster.get_settings(
  8. flat_settings=True,
  9. include_defaults=True,
  10. )
  11. print(resp1)

Ruby

  1. response = client.indices.get_settings(
  2. index: 'my-index-000001',
  3. flat_settings: true,
  4. include_defaults: true
  5. )
  6. puts response
  7. response = client.cluster.get_settings(
  8. flat_settings: true,
  9. include_defaults: true
  10. )
  11. puts response

Js

  1. const response = await client.indices.getSettings({
  2. index: "my-index-000001",
  3. flat_settings: "true",
  4. include_defaults: "true",
  5. });
  6. console.log(response);
  7. const response1 = await client.cluster.getSettings({
  8. flat_settings: "true",
  9. include_defaults: "true",
  10. });
  11. console.log(response1);

Console

  1. GET my-index-000001/_settings?flat_settings=true&include_defaults=true
  2. GET _cluster/settings?flat_settings=true&include_defaults=true

未割り当てのシャードの最も一般的な原因を修正するための詳細なガイダンスについては、このガイドを参照するか、Elasticサポートにお問い合わせください。

未割り当てのシャードを診断するには、次の手順に従ってください:

  • 1. cat shards APIを使用して未割り当てのシャードを表示します。

Python

  1. resp = client.cat.shards(
  2. v=True,
  3. h="index,shard,prirep,state,node,unassigned.reason",
  4. s="state",
  5. )
  6. print(resp)

Ruby

  1. response = client.cat.shards(
  2. v: true,
  3. h: 'index,shard,prirep,state,node,unassigned.reason',
  4. s: 'state'
  5. )
  6. puts response

Js

  1. const response = await client.cat.shards({
  2. v: "true",
  3. h: "index,shard,prirep,state,node,unassigned.reason",
  4. s: "state",
  5. });
  6. console.log(response);

Console

  1. GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state

応答は次のようになります:

Console-Result

  1. [
  2. {
  3. "index": "my-index-000001",
  4. "shard": "0",
  5. "prirep": "p",
  6. "state": "UNASSIGNED",
  7. "node": null,
  8. "unassigned.reason": "INDEX_CREATED"
  9. }
  10. ]

未割り当てのシャードは、stateUNASSIGNEDです。prirepの値は、プライマリシャードの場合はp、レプリカの場合はrです。
例のインデックスには、未割り当てのプライマリシャードがあります。

  • 2. 未割り当てのシャードが割り当てられない理由と、Elasticsearchがそれを割り当てるために取るべきアクションを理解するには、クラスタ割り当て説明APIを使用します。

Python

  1. resp = client.cluster.allocation_explain(
  2. index="my-index-000001",
  3. shard=0,
  4. primary=True,
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.allocation_explain(
  2. body: {
  3. index: 'my-index-000001',
  4. shard: 0,
  5. primary: true
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.allocationExplain({
  2. index: "my-index-000001",
  3. shard: 0,
  4. primary: true,
  5. });
  6. console.log(response);

Console

  1. GET _cluster/allocation/explain
  2. {
  3. "index": "my-index-000001",
  4. "shard": 0,
  5. "primary": true
  6. }
診断したいインデックス。
未割り当てのシャードID。
プライマリシャードを診断していることを示します。

応答は次のようになります:

Console-Result

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : true,
  5. "current_state" : "unassigned",
  6. "unassigned_info" : {
  7. "reason" : "INDEX_CREATED",
  8. "at" : "2022-01-04T18:08:16.600Z",
  9. "last_allocation_status" : "no"
  10. },
  11. "can_allocate" : "no",
  12. "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.",
  13. "node_allocation_decisions" : [
  14. {
  15. "node_id" : "8qt2rY-pT6KNZB3-hGfLnw",
  16. "node_name" : "node-0",
  17. "transport_address" : "127.0.0.1:9401",
  18. "roles": ["data_content", "data_hot"]
  19. "node_attributes" : {},
  20. "node_decision" : "no",
  21. "weight_ranking" : 1,
  22. "deciders" : [
  23. {
  24. "decider" : "filter",
  25. "decision" : "NO",
  26. "explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
  27. }
  28. ]
  29. }
  30. ]
  31. }
シャードの現在の状態。
シャードが元々未割り当てになった理由。
シャードを割り当てるかどうか。
特定のノードにシャードを割り当てるかどうか。
ノードのno決定を導いた決定者。
決定者がno決定を返した理由の説明、決定に至った設定を指摘する役立つヒント。

Python

  1. resp = client.indices.get_settings(
  2. index="my-index-000001",
  3. flat_settings=True,
  4. include_defaults=True,
  5. )
  6. print(resp)
  7. resp1 = client.cluster.get_settings(
  8. flat_settings=True,
  9. include_defaults=True,
  10. )
  11. print(resp1)

Ruby

  1. response = client.indices.get_settings(
  2. index: 'my-index-000001',
  3. flat_settings: true,
  4. include_defaults: true
  5. )
  6. puts response
  7. response = client.cluster.get_settings(
  8. flat_settings: true,
  9. include_defaults: true
  10. )
  11. puts response

Js

  1. const response = await client.indices.getSettings({
  2. index: "my-index-000001",
  3. flat_settings: "true",
  4. include_defaults: "true",
  5. });
  6. console.log(response);
  7. const response1 = await client.cluster.getSettings({
  8. flat_settings: "true",
  9. include_defaults: "true",
  10. });
  11. console.log(response1);

Console

  1. GET my-index-000001/_settings?flat_settings=true&include_defaults=true
  2. GET _cluster/settings?flat_settings=true&include_defaults=true

未割り当てのシャードの最も一般的な原因を修正するための詳細なガイダンスについては、このガイドを参照してください。