Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›REST API ›API кластера

API перенаправления кластера

Новая справка по API

Для получения самых последних данных API обратитесь к API кластера.

Изменяет распределение фрагментов в кластере.

Запрос

POST /_cluster/reroute?metric=none

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

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

Описание

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

Важно отметить, что после обработки любых команд перенаправления Elasticsearch выполнит перебалансировку, как обычно (учитывая значения настроек, таких как cluster.routing.rebalance.enable), чтобы сохранить состояние баланса. Например, если запрошенное распределение включает перемещение фрагмента с node1 на node2, это может привести к перемещению фрагмента с node2 обратно на node1 для выравнивания.

Кластер может быть настроен на отключение распределения с помощью настройки cluster.routing.allocation.enable. Если распределение отключено, единственные распределения, которые будут выполняться, — это явные, заданные с помощью команды reroute, и последующие распределения из-за перебалансировки.

Возможна запуск команд reroute в режиме «сухого запуска» с помощью параметра запроса URI ?dry_run или передачей "dry_run": true в теле запроса. Это позволит рассчитать результат применения команд к текущему состоянию кластера и вернуть результирующее состояние кластера после применения команд (и перебалансировки), но фактически не выполнит запрошенные изменения.

Если включен параметр URI ?explain, в ответ будет включено подробное объяснение, почему команды могут быть или не могут быть выполнены.

Кластер попытается распределить фрагмент максимум index.allocation.max_retries раз подряд (по умолчанию 5), прежде чем отказаться и оставить фрагмент нераспределённым. Такая ситуация может быть вызвана структурными проблемами, такими как наличие анализатора, который ссылается на файл стоп-слов, которого нет на всех узлах.

После исправления проблемы распределение можно вручную повторить, вызвав API reroute с параметром URI ?retry_failed, что позволит выполнить одну попытку повторной обработки для этих фрагментов.

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

dry_run
(Необязательно, Булево) Если true, запрос моделирует операцию только и возвращает результирующее состояние.
explain
(Необязательно, Булево) Если true, ответ содержит объяснение, почему команды могут или не могут быть выполнены.
metric

(Необязательно, строка) Ограничивает информацию, возвращаемую указанными метриками. Все варианты, кроме none, устарели и должны быть избегаемы для этого параметра. По умолчанию — все, кроме метаданных. Доступны следующие варианты:

Варианты для metric
_all
Показать все метрики.
blocks
Показать blocks часть ответа.
master_node
Показать выбранную master_node часть ответа.
metadata
Показать metadata часть ответа. Если вы укажете список индексов через запятую, возвращаемый вывод будет содержать только метаданные для этих индексов.
nodes
Показать nodes часть ответа.
none
Исключить все поле state из ответа.
routing_table
Показать routing_table часть ответа.
version
Показать версию состояния кластера.
retry_failed
(Необязательно, Булево) Если true, то возобновляет распределение фрагментов, заблокированных из-за слишком большого количества последующих неудач распределения.
master_timeout
(Необязательно, единицы времени) Время ожидания узла-мастера. Если узел-мастер недоступен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию 30s. Также может быть установлено в -1, чтобы указать, что запрос никогда не должен истекать.
timeout
(Необязательно, единицы времени) Время ожидания ответа от всех соответствующих узлов в кластере после обновления метаданных кластера. Если ответ не получен до истечения срока ожидания, обновление метаданных кластера всё равно применяется, но в ответе будет указано, что оно не было полностью подтверждено. По умолчанию 30s. Также может быть установлено в -1, чтобы указать, что запрос никогда не должен истекать.

Тело запроса

commands

(Обязательно, массив объектов) Определяет команды для выполнения. Поддерживаемые команды:

Свойства commands
move
Перемещает запущенный фрагмент с одного узла на другой. Принимает index и shard для имени индекса и номера фрагмента, from_node для узла, с которого перемещается фрагмент, и to_node для узла, на который перемещается фрагмент.
cancel
Отменяет распределение фрагмента (или восстановление). Принимает index и shard для имени индекса и номера фрагмента, и node для узла, на котором отменяется распределение фрагмента. Это может быть использовано для принудительной ресинхронизации существующих реплик из первичного фрагмента, отменив их и позволив им быть повторно инициализированными через стандартный процесс восстановления. По умолчанию можно отменять распределение только реплики фрагмента. Если необходимо отменить распределение первичного фрагмента, то флаг allow_primary также должен быть включён в запрос.
allocate_replica
Распределяет неназначенный реплики фрагмент на узел. Принимает index и shard для имени индекса и номера фрагмента, и node для распределения фрагмента. Учитывает решатели распределения.

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

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

Следующие две команды опасны и могут привести к потере данных. Они предназначены для использования в случаях, когда исходные данные не могут быть восстановлены, и администратор кластера принимает потерю. Если у вас возникла временная проблема, которая может быть исправлена, см. флаг retry_failed, описанный выше. В качестве акцента: если эти команды выполнены, а затем в кластер присоединяется узел, содержащий копию затронутого фрагмента, то копия на вновь присоединившемся узле будет удалена или перезаписана.

allocate_stale_primary
Распределяет первичный фрагмент на узел, содержащий устаревшую копию. Принимает index и shard для имени индекса и номера фрагмента, и node для распределения фрагмента. Использование этой команды может привести к потере данных для предоставленного идентификатора фрагмента. Если позже в кластер присоединится узел с хорошей копией данных, эти данные будут удалены или перезаписаны данными устаревшей копии, которая была принудительно распределена с помощью этой команды. Чтобы обеспечить полное понимание этих последствий, эта команда требует, чтобы флаг accept_data_loss был явно установлен в true.
allocate_empty_primary
Распределяет пустой первичный фрагмент на узел. Принимает index и shard для имени индекса и номера фрагмента, и node для распределения фрагмента. При использовании этой команды происходят полная потеря всех данных, которые были индексированы в этот фрагмент, если он был ранее запущен. Если позже в кластер присоединится узел с копией данных, эти данные будут удалены. Чтобы обеспечить полное понимание этих последствий, эта команда требует, чтобы флаг accept_data_loss был явно установлен в true.

Примеры

Вот короткий пример простого вызова API для перенаправления:

POST /_cluster/reroute?metric=none
{
  "commands": [
    {
      "move": {
        "index": "test", "shard": 0,
        "from_node": "node1", "to_node": "node2"
      }
    },
    {
      "allocate_replica": {
        "index": "test", "shard": 1,
        "node": "node3"
      }
    }
  ]
}

© 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/8.17/cluster-reroute.html

Spec-Zone.ru

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