クラスタ割り当て説明API

シャードの現在の 割り当て に関する説明を提供します。

Python

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

Ruby

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

Js

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

コンソール

  1. GET _cluster/allocation/explain
  2. {
  3. "index": "my-index-000001",
  4. "shard": 0,
  5. "primary": false,
  6. "current_node": "my-node"
  7. }

リクエスト

GET _cluster/allocation/explain

POST _cluster/allocation/explain

前提条件

  • Elasticsearchのセキュリティ機能が有効になっている場合、このAPIを使用するには、monitorまたはmanage クラスタ特権 を持っている必要があります。

説明

クラスタ割り当て説明APIの目的は、クラスタ内のシャードの割り当てに関する説明を提供することです。未割り当てのシャードについては、説明APIがそのシャードが未割り当てである理由を提供します。割り当てられたシャードについては、説明APIがそのシャードが現在のノードに留まっている理由、または他のノードに移動または再バランスされていない理由を提供します。このAPIは、シャードが未割り当てである理由や、期待される状況とは異なり、シャードが現在のノードに留まり続ける理由を診断しようとする際に非常に役立ちます。

クエリパラメータ

  • include_disk_info
  • (オプション、ブール値) true の場合、ディスク使用量とシャードサイズに関する情報を返します。デフォルトは false です。
  • include_yes_decisions
  • (オプション、ブール値) true の場合、説明内のYES決定を返します。デフォルトは false です。

リクエストボディ

  • current_node
  • (オプション、文字列) 説明するシャードを現在保持しているノードのIDまたは名前を指定します。未割り当てのシャードを説明するには、このパラメータを省略します。
  • index
  • (オプション、文字列) 説明を希望するインデックスの名前を指定します。
  • primary
  • (オプション、ブール値) true の場合、指定されたシャードIDのプライマリシャードの説明を返します。
  • shard
  • (オプション、整数) 説明を希望するシャードのIDを指定します。

未割り当てのプライマリシャード

設定の競合

以下のリクエストは、未割り当てのプライマリシャードの割り当て説明を取得します。

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);

コンソール

  1. GET _cluster/allocation/explain
  2. {
  3. "index": "my-index-000001",
  4. "shard": 0,
  5. "primary": true
  6. }

APIの応答は、シャードが存在しないノードにのみ割り当て可能であることを示しています。

コンソール-結果

  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" : "2017-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", "data_cold", "data_content", "data_frozen", "data_hot", "data_warm", "ingest", "master", "ml", "remote_cluster_client", "transform"],
  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 決定を返した理由の説明、決定を導いた設定を指摘する有用なヒントを含みます。この例では、新しく作成されたインデックスには、nonexistent_node という名前のノードにのみ割り当てられる必要がある インデックス設定 があり、そのノードは存在しないため、インデックスは割り当てることができません。

最大リトライ回数を超えました

以下の応答は、最大の割り当てリトライ試行回数に達した未割り当てのプライマリシャードの割り当て説明を含みます。

Js

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : true,
  5. "current_state" : "unassigned",
  6. "unassigned_info" : {
  7. "at" : "2017-01-04T18:03:28.464Z",
  8. "failed shard on node [mEKjwwzLT1yJVb8UxT6anw]: failed recovery, failure RecoveryFailedException",
  9. "reason": "ALLOCATION_FAILED",
  10. "failed_allocation_attempts": 5,
  11. "last_allocation_status": "no",
  12. },
  13. "can_allocate": "no",
  14. "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes",
  15. "node_allocation_decisions" : [
  16. {
  17. "node_id" : "3sULLVJrRneSg0EfBB-2Ew",
  18. "node_name" : "node_t0",
  19. "transport_address" : "127.0.0.1:9400",
  20. "roles" : ["data_content", "data_hot"],
  21. "node_decision" : "no",
  22. "store" : {
  23. "matching_size" : "4.2kb",
  24. "matching_size_in_bytes" : 4325
  25. },
  26. "deciders" : [
  27. {
  28. "decider": "max_retry",
  29. "decision" : "NO",
  30. "explanation": "shard has exceeded the maximum number of retries [5] on failed allocation attempts - manually call [/_cluster/reroute?retry_failed=true] to retry, [unassigned_info[[reason=ALLOCATION_FAILED], at[2024-07-30T21:04:12.166Z], failed_attempts[5], failed_nodes[[mEKjwwzLT1yJVb8UxT6anw]], delayed=false, details[failed shard on node [mEKjwwzLT1yJVb8UxT6anw]: failed recovery, failure RecoveryFailedException], allocation_status[deciders_no]]]"
  31. }
  32. ]
  33. }
  34. ]
  35. }

決定者メッセージが一時的な割り当ての問題を示す場合は、クラスタ再ルートAPI を使用して割り当てを再試行します。

有効なシャードコピーがありません

以下の応答は、以前に割り当てられていた未割り当てのプライマリシャードの割り当て説明を含みます。

Js

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : true,
  5. "current_state" : "unassigned",
  6. "unassigned_info" : {
  7. "reason" : "NODE_LEFT",
  8. "at" : "2017-01-04T18:03:28.464Z",
  9. "details" : "node_left[OIWe8UhhThCK0V5XfmdrmQ]",
  10. "last_allocation_status" : "no_valid_shard_copy"
  11. },
  12. "can_allocate" : "no_valid_shard_copy",
  13. "allocate_explanation" : "Elasticsearch can't allocate this shard because there are no copies of its data in the cluster. Elasticsearch will allocate this shard when a node holding a good copy of its data joins the cluster. If no such node is available, restore this index from a recent snapshot."
  14. }

シャードが no_valid_shard_copy の割り当てステータスで未割り当ての場合、すべてのノードがクラスタに存在することを確認してください。シャードの同期コピーを含むすべてのノードが失われた場合、シャードのデータを回復できます

未割り当てのレプリカシャード

割り当てが遅延

以下の応答は、遅延割り当て により未割り当てのレプリカの割り当て説明を含みます。

Js

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : false,
  5. "current_state" : "unassigned",
  6. "unassigned_info" : {
  7. "reason" : "NODE_LEFT",
  8. "at" : "2017-01-04T18:53:59.498Z",
  9. "details" : "node_left[G92ZwuuaRY-9n8_tc-IzEg]",
  10. "last_allocation_status" : "no_attempt"
  11. },
  12. "can_allocate" : "allocation_delayed",
  13. "allocate_explanation" : "The node containing this shard copy recently left the cluster. Elasticsearch is waiting for it to return. If the node does not return within [%s] then Elasticsearch will allocate this shard to another node. Please wait.",
  14. "configured_delay" : "1m",
  15. "configured_delay_in_millis" : 60000,
  16. "remaining_delay" : "59.8s",
  17. "remaining_delay_in_millis" : 59824,
  18. "node_allocation_decisions" : [
  19. {
  20. "node_id" : "pmnHu_ooQWCPEFobZGbpWw",
  21. "node_name" : "node_t2",
  22. "transport_address" : "127.0.0.1:9402",
  23. "roles" : ["data_content", "data_hot"],
  24. "node_decision" : "yes"
  25. },
  26. {
  27. "node_id" : "3sULLVJrRneSg0EfBB-2Ew",
  28. "node_name" : "node_t0",
  29. "transport_address" : "127.0.0.1:9400",
  30. "roles" : ["data_content", "data_hot"],
  31. "node_decision" : "no",
  32. "store" : {
  33. "matching_size" : "4.2kb",
  34. "matching_size_in_bytes" : 4325
  35. },
  36. "deciders" : [
  37. {
  38. "decider" : "same_shard",
  39. "decision" : "NO",
  40. "explanation" : "a copy of this shard is already allocated to this node [[my-index-000001][0], node[3sULLVJrRneSg0EfBB-2Ew], [P], s[STARTED], a[id=eV9P8BN1QPqRc3B4PLx6cg]]"
  41. }
  42. ]
  43. }
  44. ]
  45. }
クラスタを離れたノードにより存在しないレプリカシャードを割り当てる前の設定された遅延。
レプリカシャードを割り当てる前の残りの遅延。
ノード上で見つかったシャードデータに関する情報。

割り当てが制限されました

以下の応答は、割り当てを待機中のレプリカの割り当て説明を含みますが、現在は他のキューに入ったシャードを待っています。

Js

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : false,
  5. "current_state" : "unassigned",
  6. "unassigned_info" : {
  7. "reason" : "NODE_LEFT",
  8. "at" : "2017-01-04T18:53:59.498Z",
  9. "details" : "node_left[G92ZwuuaRY-9n8_tc-IzEg]",
  10. "last_allocation_status" : "no_attempt"
  11. },
  12. "can_allocate": "throttled",
  13. "allocate_explanation": "Elasticsearch is currently busy with other activities. It expects to be able to allocate this shard when those activities finish. Please wait.",
  14. "node_allocation_decisions" : [
  15. {
  16. "node_id" : "3sULLVJrRneSg0EfBB-2Ew",
  17. "node_name" : "node_t0",
  18. "transport_address" : "127.0.0.1:9400",
  19. "roles" : ["data_content", "data_hot"],
  20. "node_decision" : "no",
  21. "deciders" : [
  22. {
  23. "decider": "throttling",
  24. "decision": "THROTTLE",
  25. "explanation": "reached the limit of incoming shard recoveries [2], cluster setting [cluster.routing.allocation.node_concurrent_incoming_recoveries=2] (can also be set via [cluster.routing.allocation.node_concurrent_recoveries])"
  26. }
  27. ]
  28. }
  29. ]
  30. }

これは、大量のシャードが割り当て中に表示される可能性のある一時的なメッセージです。

割り当てられたシャード

現在のノードに留まることができません

以下の応答は、割り当てられたシャードの割り当て説明を含みます。応答は、シャードが現在のノードに留まることが許可されておらず、再割り当てされる必要があることを示しています。

Js

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : true,
  5. "current_state" : "started",
  6. "current_node" : {
  7. "id" : "8lWJeJ7tSoui0bxrwuNhTA",
  8. "name" : "node_t1",
  9. "transport_address" : "127.0.0.1:9401",
  10. "roles" : ["data_content", "data_hot"]
  11. },
  12. "can_remain_on_current_node" : "no",
  13. "can_remain_decisions" : [
  14. {
  15. "decider" : "filter",
  16. "decision" : "NO",
  17. "explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
  18. }
  19. ],
  20. "can_move_to_other_node" : "no",
  21. "move_explanation" : "This shard may not remain on its current node, but Elasticsearch isn't allowed to move it to another node. 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.",
  22. "node_allocation_decisions" : [
  23. {
  24. "node_id" : "_P8olZS8Twax9u6ioN-GGA",
  25. "node_name" : "node_t0",
  26. "transport_address" : "127.0.0.1:9400",
  27. "roles" : ["data_content", "data_hot"],
  28. "node_decision" : "no",
  29. "weight_ranking" : 1,
  30. "deciders" : [
  31. {
  32. "decider" : "filter",
  33. "decision" : "NO",
  34. "explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
  35. }
  36. ]
  37. }
  38. ]
  39. }
シャードが現在のノードに留まることが許可されているかどうか。
シャードが現在のノードに留まることが許可されていない理由に関与した決定者。
シャードが別のノードに割り当てられることが許可されているかどうか。

現在のノードに留まる必要があります

以下の応答は、現在のノードに留まる必要があるシャードの割り当て説明を含みます。シャードを別のノードに移動してもクラスタのバランスは改善されません。

Js

  1. {
  2. "index" : "my-index-000001",
  3. "shard" : 0,
  4. "primary" : true,
  5. "current_state" : "started",
  6. "current_node" : {
  7. "id" : "wLzJm4N4RymDkBYxwWoJsg",
  8. "name" : "node_t0",
  9. "transport_address" : "127.0.0.1:9400",
  10. "roles" : ["data_content", "data_hot"],
  11. "weight_ranking" : 1
  12. },
  13. "can_remain_on_current_node" : "yes",
  14. "can_rebalance_cluster" : "yes",
  15. "can_rebalance_to_other_node" : "no",
  16. "rebalance_explanation" : "Elasticsearch cannot rebalance this shard to another node since there is no node to which allocation is permitted which would improve the cluster balance. If you expect this shard to be rebalanced to another node, find this node in the node-by-node explanation and address the reasons which prevent Elasticsearch from rebalancing this shard there.",
  17. "node_allocation_decisions" : [
  18. {
  19. "node_id" : "oE3EGFc8QN-Tdi5FFEprIA",
  20. "node_name" : "node_t1",
  21. "transport_address" : "127.0.0.1:9401",
  22. "roles" : ["data_content", "data_hot"],
  23. "node_decision" : "worse_balance",
  24. "weight_ranking" : 1
  25. }
  26. ]
  27. }
クラスタでの再バランスが許可されているかどうか。
シャードが別のノードに再バランスされることが許可されているかどうか。
シャードがノードに再バランスされない理由、この場合は現在のノードよりも良いバランスを提供しないことを示しています。

引数がありません

引数なしでAPIを呼び出すと、Elasticsearchは任意の未割り当てのプライマリまたはレプリカシャードの割り当て説明を取得し、最初に未割り当てのプライマリシャードを返します。

Python

  1. resp = client.cluster.allocation_explain()
  2. print(resp)

Ruby

  1. response = client.cluster.allocation_explain
  2. puts response

Js

  1. const response = await client.cluster.allocationExplain();
  2. console.log(response);

コンソール

  1. GET _cluster/allocation/explain

クラスタに未割り当てのシャードが含まれていない場合、APIは 400 エラーを返します。