Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Управление данными ›Действия жизненного цикла индексов

Сжатие

Разрешенные фазы: 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, может быть установлен только один из них.
allow_write_after_shrink
(Необязательно, булево значение) Если true, сжатый индекс делается доступным для записи путём удаления блока записи. По умолчанию false.

Пример

Явно задать количество фрагментов нового сжатого индекса

resp = client.ilm.put_lifecycle(
    name="my_policy",
    policy={
        "phases": {
            "warm": {
                "actions": {
                    "shrink": {
                        "number_of_shards": 1
                    }
                }
            }
        }
    },
)
print(resp)
response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      phases: {
        warm: {
          actions: {
            shrink: {
              number_of_shards: 1
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.ilm.putLifecycle({
  name: "my_policy",
  policy: {
    phases: {
      warm: {
        actions: {
          shrink: {
            number_of_shards: 1,
          },
        },
      },
    },
  },
});
console.log(response);
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "shrink" : {
            "number_of_shards": 1
          }
        }
      }
    }
  }
}

Вычисление оптимального количества первичных фрагментов для сжатого индекса

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

resp = client.ilm.put_lifecycle(
    name="my_policy",
    policy={
        "phases": {
            "warm": {
                "actions": {
                    "shrink": {
                        "max_primary_shard_size": "50gb"
                    }
                }
            }
        }
    },
)
print(resp)
response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      phases: {
        warm: {
          actions: {
            shrink: {
              max_primary_shard_size: '50gb'
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.ilm.putLifecycle({
  name: "my_policy",
  policy: {
    phases: {
      warm: {
        actions: {
          shrink: {
            max_primary_shard_size: "50gb",
          },
        },
      },
    },
  },
});
console.log(response);
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/8.17/ilm-shrink.html

Spec-Zone.ru

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