Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›REST API ›API индексов

API уменьшения индекса

Сжимает существующий индекс в новый индекс с меньшим количеством первичных фрагментов.

POST /my-index-000001/_shrink/shrunk-my-index-000001

Запрос

POST /<index>/_shrink/<target-index>

PUT /<index>/_shrink/<target-index>

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

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

    • Индекс должен быть только для чтения.
    • Копия каждого фрагмента индекса должна находиться на одном узле.
    • Индекс должен иметь green статус состояния кластера.

Для упрощения распределения фрагментов рекомендуется также удалить реплики фрагментов индекса. Позже вы можете повторно добавить реплики фрагментов в рамках операции сжатия.

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

PUT /my_source_index/_settings
{
  "settings": {
    "index.number_of_replicas": 0,                                
    "index.routing.allocation.require._name": "shrink_node_name", 
    "index.blocks.write": true                                    
  }
}

Удаляет фрагменты реплик для индекса.

Перемещает фрагменты индекса на shrink_node_name узел. См. Фильтрацию распределения фрагментов на уровне индекса.

Препятствует выполнению операций записи в этот индекс. Изменения метаданных, такие как удаление индекса, все еще разрешены.

Перемещение исходного индекса может занять некоторое время. Прогресс можно отслеживать с помощью _cat recovery API или можно использовать cluster health API, чтобы дождаться перемещения всех фрагментов с параметром wait_for_no_relocating_shards.

Описание

API сжатия индекса позволяет сжать существующий индекс в новый индекс с меньшим количеством первичных фрагментов. Запрашиваемое количество первичных фрагментов в целевом индексе должно быть кратно количеству фрагментов в исходном индексе. Например, индекс с 8 первичными фрагментами можно сжать в 4, 2 или 1 первичных фрагментов, а индекс с 15 первичными фрагментами можно сжать в 5, 3 или 1. Если количество фрагментов в индексе является простым числом, он может быть сжат только в один первичный фрагмент. Перед сжатием (первичная или реплицированная) копия каждого фрагмента индекса должна быть на одном узле.

Текущий индекс записи в потоке данных не может быть сжат. Чтобы сжать текущий индекс записи, необходимо сначала выполнить перенос потока данных, чтобы создать новый индекс записи, а затем сжать предыдущий индекс записи.

Как работает сжатие

Операция сжатия:

  1. Создает новый целевой индекс с тем же определением, что и исходный индекс, но с меньшим количеством первичных фрагментов.
  2. Создает жёсткие ссылки на сегменты из исходного индекса в целевой индекс. (Если файловая система не поддерживает жёсткие ссылки, то все сегменты копируются в новый индекс, что значительно увеличивает время процесса. Также, если используются несколько путей данных, фрагменты на разных путях данных требуют полной копии файлов сегментов, если они не находятся на одном диске, так как жёсткие ссылки не работают через диски)
  3. Восстанавливает целевой индекс, как если бы это был закрытый индекс, который только что был повторно открыт.

Сжать индекс

Чтобы сжать my_source_index в новый индекс под названием my_target_index, выполните следующий запрос:

POST /my_source_index/_shrink/my_target_index
{
  "settings": {
    "index.routing.allocation.require._name": null, 
    "index.blocks.write": null 
  }
}

Очищает требования к распределению, скопированные из исходного индекса.

Очищает блокировку записи индекса, скопированные из исходного индекса.

Вышеуказанный запрос возвращает результат сразу после добавления целевого индекса в состояние кластера — он не ждет начала операции сжатия.

Индексы могут быть сжаты только в том случае, если они удовлетворяют следующим требованиям:

  • Целевой индекс не должен существовать.
  • Исходный индекс должен иметь больше первичных фрагментов, чем целевой индекс.
  • Количество первичных фрагментов в целевом индексе должно быть кратно количеству первичных фрагментов в исходном индексе. Исходный индекс должен иметь больше первичных фрагментов, чем целевой индекс.
  • Индекс не должен содержать более 2,147,483,519 документов в общей сложности во всех фрагментах, которые будут сжаты в один фрагмент в целевом индексе, так как это максимальное количество документов, которое может поместиться в один фрагмент.
  • Узел, обрабатывающий процесс сжатия, должен иметь достаточно свободного дискового пространства, чтобы разместить вторую копию существующего индекса.

_shrink API похож на create index API и принимает settings и aliases параметры для целевого индекса:

POST /my_source_index/_shrink/my_target_index
{
  "settings": {
    "index.number_of_replicas": 1,
    "index.number_of_shards": 1, 
    "index.codec": "best_compression" 
  },
  "aliases": {
    "my_search_indices": {}
  }
}

Количество фрагментов в целевом индексе. Это должно быть кратно количеству фрагментов в исходном индексе.

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

Определения карт не могут быть указаны в запросе _shrink.

Отслеживание процесса сжатия

Процесс сжатия можно отслеживать с помощью _cat recovery API, или cluster health API можно использовать для ожидания, пока все первичные фрагменты не будут распределены, установив параметр wait_for_status в значение yellow.

_shrink API возвращает результат, как только целевой индекс добавлен в состояние кластера, до распределения каких-либо фрагментов. В этот момент все фрагменты находятся в состоянии unassigned. Если по какой-либо причине целевой индекс не может быть распределён на узле сжатия, его первичный фрагмент останется в состоянии unassigned, пока он не будет распределен на этом узле.

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

Ожидание активных фрагментов

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

Параметры пути

<index>
(Обязательно, строка) Имя исходного индекса для сжатия.
<target-index>

(Обязательно, строка) Имя целевого индекса для создания.

Имена индексов должны соответствовать следующим критериям:

  • Только строчные буквы
  • Не может содержать \, /, *, ?, ", <, >, |, ` ` (пробел), ,, #
  • Индексы до 7.0 могли содержать двоеточие (:), но это устарело и не будет поддерживаться в 7.0+
  • Не может начинаться с -, _, +
  • Не может быть . или ..
  • Не может быть длиннее 255 байт (обратите внимание, это байты, поэтому многобайтные символы будут быстрее достигать предела 255)
  • Имена, начинающиеся с ., устарели, за исключением скрытых индексов и внутренних индексов, управляемых плагинами

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

wait_for_active_shards

(Необязательно, строка) Количество активных копий фрагментов, которое должно быть активным перед выполнением операции. Установите значение в all или любое целое положительное число до общего количества фрагментов в индексе (number_of_replicas+1). По умолчанию: 1, первичный фрагмент.

См. Активные фрагменты.

master_timeout
(Необязательно, единицы измерения времени) Период ожидания подключения к мастер-узлу. Если ответ не получен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию 30s.
timeout
(Необязательно, единицы измерения времени) Период ожидания ответа. Если ответ не получен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию 30s.

Тело запроса

aliases

(Необязательно, объект объектов) Псевдонимы для результирующего индекса.

Свойства объектов aliases
<alias>

(Обязательно, объект) Ключ — имя псевдонима. Имена псевдонимов индексов поддерживают date math.

Тело объекта содержит параметры для псевдонима. Поддерживается пустой объект.

Свойства <alias>
filter
(Необязательно, объект Query DSL) Запрос, используемый для ограничения документов, к которым может получить доступ псевдоним.
index_routing
(Необязательно, строка) Значение, используемое для маршрутизации операций индексирования на определенный фрагмент. Если указано, это значение переопределяет routing для операций индексирования.
is_hidden
(Необязательно, Булево) Если true, псевдоним скрыт. По умолчанию false. Все индексы для псевдонима должны иметь одинаковое значение is_hidden.
is_write_index
(Необязательно, Булево) Если true, индекс является индексом записи для псевдонима. По умолчанию false.
routing
(Необязательно, строка) Значение, используемое для маршрутизации операций индексирования и поиска на определенный фрагмент.
search_routing
(Необязательно, строка) Значение, используемое для маршрутизации операций поиска на определенный фрагмент. Если указано, это значение переопределяет значение routing для операций поиска.
settings
(Необязательно, объект настроек индекса) Параметры конфигурации целевого индекса. См. Настройки индекса.
max_primary_shard_size
(Необязательно, единицы измерения размера в байтах) Максимальный размер первичного фрагмента для целевого индекса. Используется для определения оптимального количества фрагментов для целевого индекса. Когда этот параметр установлен, размер хранилища каждого фрагмента в целевом индексе не будет превышать указанное значение. Количество фрагментов целевого индекса по-прежнему будет кратным количеству фрагментов исходного индекса, но если параметр меньше размера одного фрагмента в исходном индексе, количество фрагментов в целевом индексе будет равно количеству фрагментов исходного индекса. Например, если этот параметр установлен в 50 ГБ, и исходный индекс имеет 60 первичных фрагментов, суммарно занимающих 100 ГБ, целевой индекс будет иметь 2 первичных фрагмента, по 50 ГБ каждый; если исходный индекс имеет 60 первичных фрагментов, суммарно занимающих 1000 ГБ, целевой индекс будет иметь 20 первичных фрагментов; если исходный индекс имеет 60 первичных фрагментов, суммарно занимающих 4000 ГБ, целевой индекс по-прежнему будет иметь 60 первичных фрагментов. Этот параметр конфликтует с number_of_shards в settings, только один из них может быть задан.

© 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/indices-shrink-index.html

Spec-Zone.ru

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