Сжатие
Разрешенные фазы: hot, warm.
Переводит исходный индекс в только для чтения и сжимает его в новый индекс с меньшим количеством первичных фрагментов. Имя результирующего индекса — shrink-<random-uuid>-<original-index-name>. Это действие соответствует API сжатия индекса.
После действия shrink все алиасы, указывающие на исходный индекс, указывают на новый сжатый индекс. Если ILM выполняет действие shrink над базовым индексом для потока данных, сжатый индекс заменяет исходный индекс в потоке. Действие shrink нельзя выполнить на индексе записи.
Для использования действия shrink в фазе hot необходимо наличие действия rollover. Если действие rollover не настроено, ILM отклонит политику.
Действие сжатия сбросит настройку index.routing.allocation.total_shards_per_node индекса, что означает отсутствие ограничения. Это необходимо для обеспечения возможности копирования всех фрагментов индекса на один узел. Это изменение настройки сохранится в индексе даже после завершения шага.
Если действие сжатия используется для индекса-фолловера, выполнение политики ожидает, пока индекс-лидер выполнит rollover (или будет иначе помечен как завершенный), затем преобразует индекс-фолловера в обычный индекс с помощью действия unfollow перед выполнением операции сжатия.
Параметры сжатия
-
number_of_shards - (Необязательно, целое число) Количество фрагментов для сжатия. Должно быть делителем количества фрагментов исходного индекса. Этот параметр конфликтует с
max_primary_shard_size, может быть задан только один из них. -
max_primary_shard_size - (Необязательно, единицы измерения размера) Максимальный размер первичного фрагмента для целевого индекса. Используется для поиска оптимального количества фрагментов для целевого индекса. При установке этого параметра размер хранилища каждого фрагмента в целевом индексе не будет превышать заданное значение. Количество фрагментов целевого индекса по-прежнему будет делителем количества фрагментов исходного индекса, но если параметр меньше размера одного фрагмента в исходном индексе, количество фрагментов целевого индекса будет равно количеству фрагментов исходного индекса. Например, если этот параметр установлен в 50 ГБ, и исходный индекс имеет 60 первичных фрагментов общей емкостью 100 ГБ, тогда целевой индекс будет иметь 2 первичных фрагмента, каждый размером 50 ГБ; если исходный индекс имеет 60 первичных фрагментов общей емкостью 1000 ГБ, тогда целевой индекс будет иметь 20 первичных фрагментов; если исходный индекс имеет 60 первичных фрагментов общей емкостью 4000 ГБ, тогда целевой индекс по-прежнему будет иметь 60 первичных фрагментов. Этот параметр конфликтует с
number_of_shardsвsettings, может быть задан только один из них.
Пример
Явно задайте количество фрагментов нового сжатого индекса
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"shrink" : {
"number_of_shards": 1
}
}
}
}
}
} Вычисление оптимального количества первичных фрагментов для сжатого индекса
Следующая политика использует параметр max_primary_shard_size для автоматического вычисления нового количества первичных фрагментов сжатого индекса на основе размера хранения исходного индекса.
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"shrink" : {
"max_primary_shard_size": "50gb"
}
}
}
}
}
} Распределение фрагментов для сжатия
Во время действия shrink ILM распределяет первичные фрагменты исходного индекса на один узел. После сжатия индекса ILM перераспределяет фрагменты сжатого индекса на соответствующие узлы в соответствии с вашими правилами распределения.
Эти шаги распределения могут завершиться ошибкой по нескольким причинам, в том числе:
- Узел удален во время действия
shrink. - Ни один узел не имеет достаточного места на диске для размещения фрагментов исходного индекса.
- Elasticsearch не может перераспределить сжатый индекс из-за конфликтующих правил распределения.
При возникновении ошибки на одном из этапов распределения ILM ожидает период, заданный в index.lifecycle.step.wait_time_threshold, который по умолчанию составляет 12 часов. Этот предельный период позволяет кластеру устранить любые проблемы, вызвавшие ошибку распределения.
Если предельный период истекает, а ILM все еще не сжало индекс, ILM пытается распределить первичные фрагменты исходного индекса на другой узел. Если ILM сжало индекс, но не смогло перераспределить фрагменты сжатого индекса в течение предельного периода, ILM удаляет сжатый индекс и повторно пытается выполнить все действие shrink.
© 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/ilm-shrink.html