Политики
Описание
Политики - это конфигурации управления индексами, описывающие:
- состояния, в которых может находиться индекс, которые отражают этапы его жизненного цикла (например hot, warm, delete и т.д.)
- действия, которые будут выполняться над индексами в определенном состоянии (например релокация на узлы холодного хранения или удаление)
- условия, которые должны быть выполнены для перехода индекса из одного состояния в другое. Например, если возраст индекса превышает восемь недель, то его следует перевести в состояние, в котором определено действие удаления
В политиках вы можете создавать любое количество состояний, связей между ними и выполняемых в них действий.
В данной таблице перечислены соответствующие поля политики, которые доступны при заполнении через интерфейс (Навигационное меню
- Управление индексами
- Политики индекса
- Создать политику
):
Идентификатор поля | Название поля | Описание | Тип | Обязательное | Изменяемое |
---|---|---|---|---|---|
policy_id | Идентификатор политики | Идентификатор политики (отображаемое имя) | string | Да | Нет |
description | Описание | Описание политики | string | Да | Да |
ism_template | ISM Шаблоны | Паттерн индексов к которому будет применяться политика | array<object> | Нет | Да |
states | Состояния | Состояния, которые определены в политике | array<object> | Да | Да |
Состояния
Состояние - это описание статуса, в котором в данный момент находится управляемый индекс. Одновременно управляемый индекс может находиться только в одном состоянии.
В данной таблице приведены параметры, которые можно настроить для состояния:
Идентификатор поля | Название поля | Описание | Тип | Обязательное |
---|---|---|---|---|
name | Название состояния | Название состояния | string | Да |
actions | Действия | Действия, которые необходимо выполнить после входа в состояние. Дополнительная информация описана в разделе «Действия» | array<object> | Да |
Определяется порядком в списке | Порядок | Расположение относительно других состояний. Выбирается с помощью выпадающего списка, состоящего из имен созданных состояний. | string | Да |
transitions | Переходы | Следующие состояния и условия, необходимые для перехода в эти состояния. Если переходов нет, то политика считает, что она завершена и может прекратить управление индексом. Если переходов несколько, то переход будет совершён в то состояние, для которого условие выполнилось первым. Дополнительная информация описана в разделе «Переходы». | array<object> | Да |
Действия
Действия - это шаги, которые политика последовательно выполняет над индексом при его переходе в определенное состояние.
ISM выполняет действия в том порядке, в котором они определены. Например, если определены действия [A,B,C,D], ISM выполняет действие A, а затем переходит в период сна, интервал которого задается настройкой кластера plugins.index_state_management.job_interval
. После окончания периода сна ISM продолжает выполнять оставшиеся действия одно за другим аналогично. Однако если ISM не может успешно выполнить действие A, операция завершается, а действия B, C и D не выполняются. Для таких случаев существует механизм повторных попыток, который будет описан ниже.
Опционально можно задать период тайм-аута действия, превышение которого приводит к принудительному завершению операции. Например, если тайм-аут установлен на 1d
, а ISM не успел выполнить действие над индексом в течение одного дня (даже в рамках повторных попыток), то действие завершится неудачей.
Для любого действия можно задать настройки таймаута и повторных попыток:
Идентификатор поля | Название поля | Описание | Тип | Обязательный | По умолчанию |
---|---|---|---|---|---|
timeout | Tаймаут | Максимально допустимое время выполнения действия | string (time unit, примеры значений: 30m , 4h , 7d ) | Нет | Не задано |
count | Количество повторных попыток | Количество раз, которое следует повторять действие если оно завершается неудачей | number | Да | Не задано |
backoff | Повторение попытки возврата | Функция обратного отсчета, используемая при ожидании повторных попыток | string (допустимые значения: Exponential , Constant , Linear ) | Нет | Exponential |
delay | Задержка повторной попытки | Время ожидания между повторными попытками | string (time unit) | Нет | Не задано |
Следующий пример настройки действия имеет период тайм-аута в один час. Политика повторяет это действие три раза с экспоненциальным обратным отсчётом, с начальной задержкой в 10 минут:
Аналогичная конфигурация в json представлении:
{
"actions": {
"timeout": "1h",
"retry": {
"count": 3,
"backoff": "exponential",
"delay": "10m"
}
}
}
Остальные параметры определяются самим действием.
Список доступных действий
ISM поддерживает следующие действия:
- force_merge
- read_only
- read_write
- replica_count
- shrink
- close
- open
- delete
- rollover
- notification
- snapshot
- index_priority
- allocation
- rollup
- Move to clickhouse
Force Merge
Уменьшает количество сегментов индекса путем слияния сегментов отдельных шардов. Перед началом процесса слияния выполняется попытка перевести индекс в состояние read-only
.
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
max_num_segments | Количество сегментов, на которые необходимо уменьшить шард | number | Да |
wait_for_completion | Следует ли ожидать выполнения действия или же вернуть ответ сразу после запуска действия | boolean | Нет |
task_execution_timeout | Тайм-аут выполнения задачи. Применяется только в том случае, если параметр wait_for_completion имеет значение false . | string (time unit) | Нет |
Пример настройки:
{
"force_merge": {
"max_num_segments": 1
}
}
Read Only
Устанавливает индекс в режим только для чтения.
Пример настройки:
{
"read_only": {}
}
Read Write
Устанавливает индекс в режим для записи.
Пример настройки:
{
"read_write": {}
}
Replica Count
Устанавливает количество реплик индекса.
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
number_of_replicas | Определяет количество реплик индекса | number | Да |
Пример настройки:
{
"replica_count": {
"number_of_replicas": 2
}
}
Shrink
Позволяет сократить количество первичных шардов индекса. С помощью этого действия можно указать:
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
num_new_shards | Максимальное количество первичных шардов в уменьшенном индексе. | integer | Да, однако не может быть использован с max_shard_size или percentage_of_source_shards |
max_shard_size | Максимальный размер в байтах шарда для целевого индекса. | string (size unit, примеры значений: 500mb , 1gb ) | Да, однако не может быть использован с num_new_shards или percentage_of_source_shards |
percentage_of_source_shards | Процент от числа исходных первичных шардов, подлежащих сокращению. Этот параметр указывает минимальный процент, который следует использовать при сокращении числа первичных шардов. Должен находиться в диапазоне от 0.0 до 1.0 исключая значения. | number | Да, однако не может быть использован с max_shard_size или num_new_shards |
target_index_name_template | Имя сокращенного индекса. Принимает строки и переменные Mustache and (например {"source": "_shrunken"} ). | string | Нет |
aliases | Псевдонимы для добавления в новый индекс. | array<object> | Нет |
force_unsafe | Следует ли выполнять действие даже при отсутствии реплик | boolean | Нет |
Пример настройки:
{
"shrink": {
"num_new_shards": 1,
"target_index_name_template": {
"source": "_shrunken"
},
"aliases": [
{
"my-alias": {}
}
],
"force_unsafe": false
}
}
Если необходимо добавить псевдонимы к действию, то параметр должен содержать массив объектов псевдонимов. Например:
"aliases": [
{
"my-alias": {}
},
{
"my-second-alias": {
"is_write_index": false,
"filter": {
"multi_match": {
"query": "QUEEN",
"fields": ["speaker", "text_entry"]
}
},
"index_routing" : "1",
"search_routing" : "1"
}
},
]
Delete
Удаляет индекс.
Пример настройки:
"delete": {}
Rollover
Создает новый индекс, если текущий достиг лимитов по размеру, возрасту или количеству документов.
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
min_index_age | Минимальный возраст индекса | string (time unit) | Нет, обязательно указание только одного из параметров. |
min_doc_count | Минимальное количество документов | integer | Нет, обязательно указание только одного из параметров. |
min_size | Минимальный общий размер индекса | string (size unit) | Нет, обязательно указание только одного из параметров. |
min_primary_shard_size | Минимальный размер первичного шарда | string (size unit) | Нет, обязательно указание только одного из параметров. |
Пример настройки:
"rollover": {
"min_size": "100gb",
"min_index_age": "1d",
"min_primary_shard_size": "20gb",
"copy_alias": false
}
Allocation
Обновляет параметры аллокации индекса, в следствии чего происходит его перемещение на узел с заданным атрибутами.
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
require | Индекс размещается только на узлах, у которых указанные атрибуты соответствует всем заданным значениям | object | Нет |
include | Индекс может размещаться на узлах, у которых указанные атрибуты соответствует хотя бы одному из заданных значений | object | Нет |
exclude | Индекс не размещается на узлах, у которых указанные атрибут соответствует любому из заданных значений | object | Нет |
wait_for | При значении true политика ожидает завершения перемещения всех шардов. При значении false (по умолчанию) действие выполняется в асинхронном режиме. | boolean | Нет |
"allocation": {
"require": {
"routing_mode": "cold"
},
"include": {},
"exclude": {},
"wait_for": false
}
При настройке параметров действия необходимо учитывать существующие правила аллокации индексов, подпадающих под данную политику. Например, если исходная конфигурация индекса содержит параметр include
: hot
, то в настройках действия следует использовать только поле include (без применения require). Совместное использование этих параметров может привести к конфликту условий аллокации, в результате чего шарды не смогут быть размещены ни на одном узле.
Move to ClickHouse
Перемещает данные в ClickHouse.
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
table_name_template | Регулярное выражение, определяющее имя таблицы в ClickHouse на основе названия индекса. Именованная группа захвата в регулярном выражении будет использоваться в качестве имени таблицы. Группа захвата должна называться name . | string (например (?<name>.*?)-\d+ ) | Да |
connection_id | Идентификатор подключения к ClickHouse, настроенный в конфигурации OpenSearch. | string | Да |
batch_size | Количество событий, отправляемых в ClickHouse за один раз. | integer | Нет |
Примеры настройки политики
Общая информация
Для начала создайте новую политику. Перейдите в раздел Политики индекса
(Навигационное меню
- Параметры системы
- Управление индексами
- Политики индекса
) и нажмите Создать политику
. В открывшемся окне выберите Визуальный редактор
и нажмите Далее
.
В форме создания укажите значения полей:
- идентификатор политики — уникальное имя политики
- описание — краткое описание ее назначения
В разделе ISM Шаблоны
задайте паттерны индексов
, к которым будет автоматически применяться данная политика при создании новых индексов.
Пример конфигурации приведен ниже:
Настройка политики с rollover
- Добавление состояния
init
Перейдите в раздел Состояния
и нажмите Добавить состояние
. Задайте имя состояния — init, затем нажмите Добавить действие
и выберите тип действия Rollover. Укажите необходимые параметры, соответствующие требованиям вашей конфигурации.
В данном примере заданы значения для следующих параметров:
- минимальный возраст индекса
- минимальный размер первичного шарда
Подробнее о параметрах действия Rollover смотрите в соответствующем разделе.
- Настройка параметров повторной попытки
В блоке Настройки таймаута и повторной попытки
рекомендуется установить следующие значения:
- количество повторных попыток:
144
- задержка повторной попытки:
10m
Эти параметры обеспечивают выполнение повторных попыток в течение 24 часов с интервалом 10 минут, что увеличивает надежность выполнения действия.
После ввода параметров нажмите Добавить действие
, затем - Сохранить состояние
.
Разделы Порядок
и Переходы
на данном этапе не настраиваются.
- Добавление состояния delete
Нажмите Добавить состояние
, укажите имя — delete
, и настройте его, как показано на примере ниже:
Добавьте действие delete и задайте соответствующие параметры в блоке Настройки таймаута и повторной попытки
:
После завершения конфигурации нажмите Добавить действие
, затем Сохранить состояние
.
- Настройка порядка и переходов
Вернитесь к состоянию init
и в разделе Порядок
выберите Добавить перед
и укажите состояние delete
.
Далее нажмите Добавить переход
. Укажите:
- состояние назначения: delete
- условия: параметр, при котором будет происходить переход между состояниями
Завершите настройку нажатием Добавить переход
, затем - Обновить состояние
.
- Создание политики
После завершения всех этапов нажмите Создать
.
На этом конфигурация политики с использованием rollover завершена.
Настройка политики с релокацией
Настройка действия будет выполнена на примере существующей политики.
- Добавление состояния
Создайте новое состояние, например с именем cold
. В параметрах Порядок
укажите: Добавить после
и выберите состояние init.
- Настройка действия allocation
Добавьте новое действие, выбрав тип действия — allocation. Заполните параметры, например, следующим образом:
{
"require": {},
"include": {
"routing_mode": "cold"
},
"exclude": {},
"wait_for": false
}
При настройке данного действия важно учитывать текущую аллокацию индексов, см. действие allocation.
Параметры в разделе Настройки таймаута и повторной попытки
можно задать аналогично тем, что использовались при настройке действия delete. Рекомендуемые значения указаны в соответствующем разделе выше.
- Настройка перехода
Для настройки перехода нажмите Добавить переход
. Укажите следующие параметры:
- состояние назначения — выберите целевое состояние
- условия — задайте условие, при котором будет выполнен переход
Пример настройки:
Затем нажмите Добавить переход
, после чего - Сохранить состояние
.
- Актуализация порядка состояний
init
иdelete
- откройте состояние
init
и задайте порядок:Добавить перед
-cold
- для состояния
delete
укажите порядок:Добавить после
-cold
На этом настройка политики с релокации завершена.
Настройка политики с ожиданием данных до отсчёта rollover
Для выполнения данной настройки требуется наличие ранее настроенной политики с использованием rollover, дополнительная информация приведена в соответствующем разделе настройка политики с rollover.
- Создание состояния
Добавьте новое состояние с именем, например, wait_events
. Откройте его для редактирования и в разделе Порядок
укажите: Добавить перед
- init
.
Для состояния wait_events
действия не добавляются.
- Настройка перехода
Нажмите Добавить переход
и задайте параметры:
- состояние назначения — выберите целевое состояние
- условия — определите условие для выполнения перехода
Пример настройки перехода:
После заполнения параметров нажмите Добавить переход
, затем - Сохранить состояние
.
- Обновление порядка состояний
Откройте состояние init
и в разделе Порядок
задайте: Добавить после
- wait_events
.
На этом настройка политики с ожиданием данных до отсчета rollover завершена.