Политики
Описание
Политики - это JSON-документы, которые определяют:
- Состояния, в которых может находиться индекс, включая состояние по умолчанию для новых индексов. Например, можно назвать состояния "hot", "warm", "delete" и т.д.
- Любые действия, которые плагин должен выполнять, когда индекс переходит в то или иное состояние, например, выполнять
rollover
. - Условия, которые должны быть выполнены для перехода индекса в новое состояние, называемые переходами. Например, если возраст индекса превышает восемь недель, то его следует перевести в состояние "удаление".
Другими словами, политика определяет состояния, в которых может находиться индекс, действия, которые необходимо выполнять в том или ином состоянии, и условия, которые должны быть выполнены для перехода из одного состояния в другое.
При разработке политик предоставляется полная свобода действий. Можно создать любое состояние, перейти в любое другое состояние и указать любое количество действий в каждом состоянии.
В данной таблице перечислены соответствующие поля политики:
Параметр | Описание | Тип | Обязательное | Только для чтения |
---|---|---|---|---|
policy_id | Имя политики | string | Да | Да |
description | Описание политики в человекочитаемом формате | string | Да | Нет |
ism_template | Указанный шаблон ISM-шаблона, соответствующий индексу для применения политики | nested list of objects | Нет | Нет |
last_updated_time | Время последнего обновления политики | timestamp | Да | Да |
error_notification | Назначение и шаблон сообщения для уведомлений об ошибках | object | Нет | Нет |
default_state | Начальное состояние по умолчанию для каждого индекса, использующего данную политику | string | Да | Нет |
states | Состояния, которые определены в политике | nested list of objects | Да | Нет |
Состояния
Состояние - это описание статуса, в котором в данный момент находится управляемый индекс. Одновременно управляемый индекс может находиться только в одном состоянии. Каждое состояние имеет связанные с ним действия, которые последовательно выполняются при входе в состояние, и переходы, которые проверяются после выполнения всех действий.
В этой таблице перечислены параметры, которые можно задать для состояния:
Поле | Описание | Тип | Обязательное |
---|---|---|---|
name | Название состояния | string | Да |
actions | Действия, которые необходимо выполнить после входа в состояние. Дополнительная информация описана в разделе «Действия» | nested list of objects | Да |
transitions | Следующие состояния и условия, необходимые для перехода в эти состояния. Если переходов нет, то политика считает, что она завершена и может прекратить управление индексом. Дополнительная информация описана в разделе «Переходы». | nested list of objects | Да |
Действия
Действия - это шаги, которые политика последовательно выполняет при переходе в определенное состояние.
ISM выполняет действия в том порядке, в котором они определены. Например, если определены действия [A,B,C,D], ISM выполняет действие A, а затем переходит в период сна, основанный на настройке кластера plugins.index_state_management.job_interval
. После окончания периода сна ISM продолжает выполнять оставшиеся действия. Однако если ISM не может успешно выполнить действие A, операция завершается, а действия B, C и D не выполняются.
Опционально можно задать период тайм-аута действия, превышение которого приводит к принудительному завершению операции. Например, если тайм-аут установлен на 1d
, а ISM не выполнил действие в течение одного дня, даже после повторных попыток, то действие завершится неудачей.
В этой таблице перечислены параметры, которые можно задать для действия:
Параметр | Описание | Тип | Обязательный | По умолчанию |
---|---|---|---|---|
timeout | Период тайм-аута для действия. Принимаются единицы времени - минуты, часы и дни. | time unit | Нет | - |
retry | Конфигурация повторных попыток для данного действия | object | Нет | Зависит от действия |
Операция retry
имеет следующие параметры:
Параметр | Описание | Тип | Обязательный | По умолчанию |
---|---|---|---|---|
count | Количество повторных попыток | number | Да | - |
backoff | Тип политики обратного отсчета, используемый при повторных попытках. Допустимые значения: Exponential, Constant и Linear | string | Нет | Exponential |
delay | Время ожидания между повторными попытками. Принимаются единицы времени - минуты, часы и дни | time unit | Нет | 1 минута |
Следующий пример действия имеет период тайм-аута в один час. Политика повторяет это действие три раза с экспоненциальным обратным отсчётом, с задержкой в 10 минут между каждым повтором:
{
"actions": {
"timeout": "1h",
"retry": {
"count": 3,
"backoff": "exponential",
"delay": "10m"
}
}
}
Операции, поддерживаемые ISM
ISM поддерживает следующие операции:
- force_merge
- read_only
- read_write
- replica_count
- shrink
- close
- open
- delete
- rollover
- notification
- snapshot
- index_priority
- allocation
- rollup
force_merge
Уменьшает количество сегментов Lucene путем слияния сегментов отдельных шардов. Перед началом процесса слияния выполняется попытка перевести индекс в состояние read-only
.
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
max_num_segments | Количество сегментов, на которые необходимо уменьшить шард | number | Да |
wait_for_completion | При установке значения false запрос возвращается сразу, а не после завершения операции. Для контроля состояния операции можно использовать API Tasks с идентификатором задачи, возвращенным запросом. По умолчанию значение true. | boolean | Нет |
task_execution_timeout | Тайм-аут выполнения задачи. Применяется только в том случае, если параметр wait_for_completion имеет значение false. По умолчанию 1h. | time unit | Нет |
{
"force_merge": {
"max_num_segments": 1
}
}
read_only
Устанавливает управляемый индекс в режим "только для чтения".
{
"read_only": {}
}
Установите параметр index.blocks.write
в true
для управляемого индекса.
Этот блок не препятствует обновлению индекса.
read_write
Устанавливает управляемый индекс в режим доступный для записи.
{
"read_write": {}
}
replica_count
Устанавливает к оличество реплик, назначаемых индексу.
Параметр | Описание | Тип | Обязательный |
---|---|---|---|
number_of_replicas | Определяет количество реплик, назначаемых индексу. | number | Да |
{
"replica_count": {
"number_of_replicas": 2
}
}
shrink
Позволяет сократить количество первичных шардов в индексах. С помощью этого действия можно указать:
- количество первичных шардов, которые должен содержать целевой индекс
- максимальный размер шарда для первичных шардов в целевом индексе
- процентное соотношение для уменьшения количества первичных шардов в целевом индексе
Параметр | Описание | Тип | Пример | Обязательный |
---|---|---|---|---|
num_new_shards | Максимальное количество первичных шардов в уменьшенном индексе. | integer | 5 | Да, однако он не может быть использован с max_shard_size или percentage_of_source_shards |
max_shard_size | Максимальный размер в байтах шарда для целевого индекса. | keyword | 5gb | Да, однако он не может быть использован с num_new_shards или percentage_of_source_shards |
percentage_of_source_shards | Процент от числа исходных первичных шардов, подлежащих сокращению. Этот параметр указывает минимальный процент, который следует использовать при сокращении числа первичных шардов. Должен находиться в диапазоне от 0.0 до 1.0 исключая значения. | percentage | 0.5 | Да, однако он не может быть использован с max_shard_size или num_new_shards |
target_index_name_template | Имя сокращенного индекса. Принимает строки и переменные Mustache and. | string или шаблон Mustache | {"source": "_shrunken"} | Нет |
aliases | Псевдонимы для добавления в новый индекс. | object | myalias | Нет, но должен быть массив объектов псевдонимов |
force_unsafe | Если true, то действие shrink выполняется даже при отсутствии реплик. | boolean | false | Нет |
{
"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"
}
},
]