Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›REST API ›Cluster APIs

API объяснения распределения фрагментов кластера

Предоставляет объяснение текущего распределения фрагмента.

GET _cluster/allocation/explain
{
  "index": "my-index-000001",
  "shard": 0,
  "primary": false,
  "current_node": "my-node"
}

Запрос

GET _cluster/allocation/explain

POST _cluster/allocation/explain

Предварительные условия

  • Если в Elasticsearch включены функции безопасности, необходимо иметь право cluster privilege monitor или manage для использования данного API.

Описание

Цель API объяснения распределения фрагментов кластера — предоставить объяснения распределения фрагментов в кластере. Для неназначенных фрагментов API объяснения предоставляет объяснение, почему фрагмент не назначен. Для назначенных фрагментов API предоставляет объяснение, почему фрагмент остается на текущем узле и не переместился или не был перебалансирован на другой узел. Данный API может быть очень полезен при диагностике причин, по которым фрагмент не назначен или почему фрагмент продолжает оставаться на текущем узле, когда ожидается обратное.

Параметры запроса

include_disk_info
(Необязательно, булево) Если true, возвращает информацию об использовании дискового пространства и размерах фрагментов. По умолчанию false.
include_yes_decisions
(Необязательно, булево) Если true, возвращает решения ДА в объяснении. По умолчанию false.

Тело запроса

current_node
(Необязательно, строка) Указывает идентификатор узла или имя узла, чтобы объяснить только фрагмент, который в данный момент расположен на указанном узле.
index
(Необязательно, строка) Указывает имя индекса, для которого требуется объяснение.
primary
(Необязательно, булево) Если true, возвращает объяснение для первичного фрагмента для данного идентификатора фрагмента.
shard
(Необязательно, целое число) Указывает идентификатор фрагмента, для которого требуется объяснение.

Примеры

Первичный фрагмент без назначения

Следующий запрос получает объяснение распределения для первичного фрагмента без назначения.

GET _cluster/allocation/explain
{
  "index": "my-index-000001",
  "shard": 0,
  "primary": true
}

Ответ API указывает, что фрагмент назначен несуществующему узлу.

{
  "index" : "my-index-000001",
  "shard" : 0,
  "primary" : true,
  "current_state" : "unassigned",                 
  "unassigned_info" : {
    "reason" : "INDEX_CREATED",                   
    "at" : "2017-01-04T18:08:16.600Z",
    "last_allocation_status" : "no"
  },
  "can_allocate" : "no",                          
  "allocate_explanation" : "cannot allocate because allocation is not permitted to any of the nodes",
  "node_allocation_decisions" : [
    {
      "node_id" : "8qt2rY-pT6KNZB3-hGfLnw",
      "node_name" : "node-0",
      "transport_address" : "127.0.0.1:9401",
      "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, с полезным указанием на настройку, которая привела к этому решению.

Следующий ответ содержит объяснение распределения для первичного фрагмента без назначения, который ранее был назначен.

{
  "index" : "my-index-000001",
  "shard" : 0,
  "primary" : true,
  "current_state" : "unassigned",
  "unassigned_info" : {
    "reason" : "NODE_LEFT",
    "at" : "2017-01-04T18:03:28.464Z",
    "details" : "node_left[OIWe8UhhThCK0V5XfmdrmQ]",
    "last_allocation_status" : "no_valid_shard_copy"
  },
  "can_allocate" : "no_valid_shard_copy",
  "allocate_explanation" : "cannot allocate because a previous copy of the primary shard existed but can no longer be found on the nodes in the cluster"
}

Реплицированный фрагмент без назначения

Следующий ответ содержит объяснение распределения для реплики, которая не назначена из-за задержки распределения.

{
  "index" : "my-index-000001",
  "shard" : 0,
  "primary" : false,
  "current_state" : "unassigned",
  "unassigned_info" : {
    "reason" : "NODE_LEFT",
    "at" : "2017-01-04T18:53:59.498Z",
    "details" : "node_left[G92ZwuuaRY-9n8_tc-IzEg]",
    "last_allocation_status" : "no_attempt"
  },
  "can_allocate" : "allocation_delayed",
  "allocate_explanation" : "cannot allocate because the cluster is still waiting 59.8s for the departed node holding a replica to rejoin, despite being allowed to allocate the shard to at least one other node",
  "configured_delay" : "1m",                      
  "configured_delay_in_millis" : 60000,
  "remaining_delay" : "59.8s",                    
  "remaining_delay_in_millis" : 59824,
  "node_allocation_decisions" : [
    {
      "node_id" : "pmnHu_ooQWCPEFobZGbpWw",
      "node_name" : "node_t2",
      "transport_address" : "127.0.0.1:9402",
      "node_decision" : "yes"
    },
    {
      "node_id" : "3sULLVJrRneSg0EfBB-2Ew",
      "node_name" : "node_t0",
      "transport_address" : "127.0.0.1:9400",
      "node_decision" : "no",
      "store" : {                                 
        "matching_size" : "4.2kb",
        "matching_size_in_bytes" : 4325
      },
      "deciders" : [
        {
          "decider" : "same_shard",
          "decision" : "NO",
          "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]]"
        }
      ]
    }
  ]
}

Настроенная задержка перед назначением фрагмента реплики, который не существует из-за ухода узла, державшего его, из кластера.

Остающаяся задержка перед назначением фрагмента реплики.

Информация о данных фрагмента, найденных на узле.

Назначенный фрагмент

Следующий ответ содержит объяснение распределения для назначенного фрагмента. Ответ указывает, что фрагмент не должен оставаться на текущем узле и должен быть перераспределен.

{
  "index" : "my-index-000001",
  "shard" : 0,
  "primary" : true,
  "current_state" : "started",
  "current_node" : {
    "id" : "8lWJeJ7tSoui0bxrwuNhTA",
    "name" : "node_t1",
    "transport_address" : "127.0.0.1:9401"
  },
  "can_remain_on_current_node" : "no",            
  "can_remain_decisions" : [                      
    {
      "decider" : "filter",
      "decision" : "NO",
      "explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
    }
  ],
  "can_move_to_other_node" : "no",                
  "move_explanation" : "cannot move shard to another node, even though it is not allowed to remain on its current node",
  "node_allocation_decisions" : [
    {
      "node_id" : "_P8olZS8Twax9u6ioN-GGA",
      "node_name" : "node_t0",
      "transport_address" : "127.0.0.1:9400",
      "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\"]"
        }
      ]
    }
  ]
}

Разрешено ли оставить фрагмент на текущем узле.

Решающие факторы, которые повлияли на решение о том, не нужно ли оставлять фрагмент на текущем узле.

Разрешено ли назначить фрагмент на другой узел.

Следующий ответ содержит объяснение распределения для фрагмента, который должен остаться на текущем узле. Перемещение фрагмента на другой узел не улучшит баланс кластера.

{
  "index" : "my-index-000001",
  "shard" : 0,
  "primary" : true,
  "current_state" : "started",
  "current_node" : {
    "id" : "wLzJm4N4RymDkBYxwWoJsg",
    "name" : "node_t0",
    "transport_address" : "127.0.0.1:9400",
    "weight_ranking" : 1
  },
  "can_remain_on_current_node" : "yes",
  "can_rebalance_cluster" : "yes",                
  "can_rebalance_to_other_node" : "no",           
  "rebalance_explanation" : "cannot rebalance as no target node exists that can both allocate this shard and improve the cluster balance",
  "node_allocation_decisions" : [
    {
      "node_id" : "oE3EGFc8QN-Tdi5FFEprIA",
      "node_name" : "node_t1",
      "transport_address" : "127.0.0.1:9401",
      "node_decision" : "worse_balance",          
      "weight_ranking" : 1
    }
  ]
}

Разрешена ли перебалансировка в кластере.

Можно ли перебалансировать фрагмент на другой узел.

Причина, по которой фрагмент нельзя перебалансировать на узел, в данном случае указывает, что это не улучшит баланс по сравнению с текущим узлом.

Без аргументов

Если вы вызываете API без аргументов, Elasticsearch извлекает объяснение распределения для произвольного первичного или реплицированного фрагмента без назначения.

GET _cluster/allocation/explain

Если в кластере нет фрагментов без назначения, API возвращает ошибку 400.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-allocation-explain.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API