Перейти к основному содержимому
Версия: 5.0

Политики

Описание

Политики - это конфигурации управления индексами, описывающие:

  • состояния, в которых может находиться индекс, которые отражают этапы его жизненного цикла (например hot, warm, delete и т.д.)
  • действия, которые будут выполняться над индексами в определенном состоянии (например релокация на узлы холодного хранения или удаление)
  • условия, которые должны быть выполнены для перехода индекса из одного состояния в другое. Например, если возраст индекса превышает восемь недель, то его следует перевести в состояние, в котором определено действие удаления

В политиках вы можете создавать любое количество состояний, связей между ними и выполняемых в них действий.

В данной таблице перечислены соответствующие поля политики, которые доступны при заполнении через интерфейс (Навигационное меню - Управление индексами - Политики индекса - Создать политику):

Идентификатор поляНазвание поляОписаниеТипОбязательноеИзменяемое
policy_idИдентификатор политикиИдентификатор политики (отображаемое имя)stringДаНет
descriptionОписаниеОписание политикиstringДаДа
ism_templateISM ШаблоныПаттерн индексов к которому будет применяться политика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 не успел выполнить действие над индексом в течение одного дня (даже в рамках повторных попыток), то действие завершится неудачей.

Для любого действия можно задать настройки таймаута и повторных попыток:

Идентификатор поляНазвание поляОписаниеТипОбязательныйПо умолчанию
timeoutTаймаутМаксимально допустимое время выполнения действия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.

ПараметрОписаниеТипОбязательный
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Нет

Схема data_scheme_parameters

Обратите внимание!

Изменения актуальны с версии 5.0.2.

ПараметрОписаниеТипОбязательный
ttl_intervalИнтервал времени жизни документов в таблице в формате interval <count> <time unit> Доступные интервалы (устанавливается на всю таблицу при создании).stringНет
ttl_columnИмя поля типа datetime, на основе которого будет высчитываться TTL.stringНет
cluster_nameИмя кластера ClickHouse (обязательное поле при replication = true или distributed = true).stringДа, при указании replication или distributed
replicationФлаг, отвечающий за создание реплицируемой таблицы при переливке (учитывается, если перемещение инициирует создание новой таблицы).booleanНет
distributedФлаг, отвечающий за создание распределенной таблицы при переливке (учитывается, если перемещение инициирует создание новой таблицы).booleanНет

Допустимые изменения маппинга

Обратите внимание!

Изменения актуальны с версии 5.0.2.

Допустимо изменение точности для дат и числовых типов в сторону большей либо той же размерности.

БылоСтало
datedate_nanos
date_nanosdate
byteinteger, long, short
shortinteger, long
integerlong
floathalf_float, scaled_float, double
half_floatfloat, scaled_float, double
scaled_floatfloat, half_float, double

Примеры настройки политики

Общая информация

Для начала создайте новую политику. Перейдите в раздел Политики индекса (Навигационное меню - Параметры системы - Управление индексами - Политики индекса) и нажмите Создать политику. В открывшемся окне выберите Визуальный редактор и нажмите Далее.

В форме создания укажите значения полей:

  • идентификатор политики — уникальное имя политики
  • описание — краткое описание ее назначения

В разделе ISM Шаблоны задайте паттерны индексов, к которым будет автоматически применяться данная политика при создании новых индексов.

Пример конфигурации приведен ниже:

Создание политики

Настройка политики с rollover

  1. Добавление состояния init

Перейдите в раздел Состояния и нажмите Добавить состояние. Задайте имя состояния — init, затем нажмите Добавить действие и выберите тип действия Rollover. Укажите необходимые параметры, соответствующие требованиям вашей конфигурации.

В данном примере заданы значения для следующих параметров:

  • минимальный возраст индекса
  • минимальный размер первичного шарда

Подробнее о параметрах действия Rollover смотрите в соответствующем разделе.

Создание действия

  1. Настройка параметров повторной попытки

В блоке Настройки таймаута и повторной попытки рекомендуется установить следующие значения:

  • количество повторных попыток: 144
  • задержка повторной попытки: 10m

Эти параметры обеспечивают выполнение повторных попыток в течение 24 часов с интервалом 10 минут, что увеличивает надежность выполнения действия.

Настройка повторной попытки

После ввода параметров нажмите Добавить действие, затем - Сохранить состояние.

Примечание

Разделы Порядок и Переходы на данном этапе не настраиваются.

  1. Добавление состояния delete

Нажмите Добавить состояние, укажите имя — delete, и настройте его, как показано на примере ниже:

Создание удаления

Добавьте действие delete и задайте соответствующие параметры в блоке Настройки таймаута и повторной попытки:

Действие Delete

После завершения конфигурации нажмите Добавить действие, затем Сохранить состояние.

  1. Настройка порядка и переходов

Вернитесь к состоянию init и в разделе Порядок выберите Добавить перед и укажите состояние delete.

Далее нажмите Добавить переход. Укажите:

  • состояние назначения: delete
  • условия: параметр, при котором будет происходить переход между состояниями

Настройка перехода

Завершите настройку нажатием Добавить переход, затем - Обновить состояние.

  1. Создание политики

После завершения всех этапов нажмите Создать.

На этом конфигурация политики с использованием rollover завершена.

Настройка политики с релокацией

Настройка действия будет выполнена на примере существующей политики.

  1. Добавление состояния

Создайте новое состояние, например с именем cold. В параметрах Порядок укажите: Добавить после и выберите состояние init.

  1. Настройка действия allocation

Добавьте новое действие, выбрав тип действия — allocation. Заполните параметры, например, следующим образом:

{
"require": {},
"include": {
"routing_mode": "cold"
},
"exclude": {},
"wait_for": false
}
Обратите внимание!

При настройке данного действия важно учитывать текущую аллокацию индексов, см. действие allocation.

Параметры в разделе Настройки таймаута и повторной попытки можно задать аналогично тем, что использовались при настройке действия delete. Рекомендуемые значения указаны в соответствующем разделе выше.

  1. Настройка перехода

Для настройки перехода нажмите Добавить переход. Укажите следующие параметры:

  • состояние назначения — выберите целевое состояние
  • условия — задайте условие, при котором будет выполнен переход

Пример настройки:

Переход релокация

Затем нажмите Добавить переход, после чего - Сохранить состояние.

  1. Актуализация порядка состояний init и delete
  • откройте состояние init и задайте порядок: Добавить перед - cold
  • для состояния delete укажите порядок: Добавить после - cold

На этом настройка политики с релокации завершена.

Настройка политики с ожиданием данных до отсчёта rollover

Для выполнения данной настройки требуется наличие ранее настроенной политики с использованием rollover, дополнительная информация приведена в соответствующем разделе настройка политики с rollover.

  1. Создание состояния

Добавьте новое состояние с именем, например, wait_events. Откройте его для редактирования и в разделе Порядок укажите: Добавить перед - init.

Для состояния wait_events действия не добавляются.

  1. Настройка перехода

Нажмите Добавить переход и задайте параметры:

  • состояние назначения — выберите целевое состояние
  • условия — определите условие для выполнения перехода

Пример настройки перехода:

Переход ожидание

После заполнения параметров нажмите Добавить переход, затем - Сохранить состояние.

  1. Обновление порядка состояний

Откройте состояние init и в разделе Порядок задайте: Добавить после - wait_events.

На этом настройка политики с ожиданием данных до отсчета rollover завершена.