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

Настройка снапшотирования кластера Smart Monitor

Снапшоты используются для резервного копирования индексов и восстановления данных в случае сбоев.

Информация

Условные обозначения:

  • OPENSEARCH_HOME - домашняя директория Smart Monitor Data Storage, обычно это /app/opensearch/
  • BACKUP_DIR - директория для хранения снапшотов
  • REPO_NAME - именование репозитория снапшотов
  • SNAPSHOT_POLICY_NAME - именование политики снапшотирования
  • SNAPSHOT_NAME - имя снапшота

Подготовка узлов кластера

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

Подготовка должна производиться на всех узлах с ролью data.

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

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

PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}

Сделать тоже самое можно из терминала следующей командой:

curl -XPUT -k -u admin "https://$OPENSEARCH_IP:9200/_cluster/settings?pretty" -H "Content-Type: application/json" -d '{"persistent":{"cluster.routing.allocation.enable": "none"}}'

После завершения подготовки всех узлов кластера включите аллокацию:

PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}

Сделать тоже самое можно из терминала следующей командой:

curl -XPUT -k -u admin "https://$OPENSEARCH_IP:9200/_cluster/settings?pretty" -H "Content-Type: application/json" -d '{"persistent":{"cluster.routing.allocation.enable": "all"}}'

Перед настройкой снапшотирования необходимо создать директорию, в которую Smart Monitor будет сохранять резервные копии. Для этого следует открыть терминал под пользователем root для выполнения команд. Необходимо создать директорию и настроить её права:

  1. Создайте каталог для хранения снапшотов и выдайте права на чтение и запись пользователю opensearch:
mkdir -p $BACKUP_DIR
chown -R opensearch:opensearch $BACKUP_DIR
  1. Настройте конфигурацию узла $OPENSEARCH_HOME/opensearch.yml любым удобным редактором добавив параметр path.repo с путем до созданной директории:
path.repo: ["{BACKUP_DIR}"]
Информация

Не рекомендуется размещать path.repo на том же диске, где хранятся данные узла.

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

Указанный путь должен быть одинаковым на всех узлах, участвующих в создании снапшотов. Если хотя бы один узел не имеет доступа — операция сохранения может завершиться с ошибкой.

  1. Перезапустите узел, чтобы изменения вступили в силу:
systemctl restart opensearch

Подготовка репозитория снапшотов

Необходимо создать репозиторий снапшотов с указанием необходимых параметров. Поддерживаются FS, S3, HDFS и прочие типы хранилищ.

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

В данной статье приводится конфигурация снапшотирования с типом хранилища FS (файловая система).

PUT /_snapshot/{REPO_NAME}
{
"type": "fs",
"settings": {
"location": "{BACKUP_REPO}"
}
}

Таблица всех параметров FS репозитория снапшотов:

ПараметрНазначение
locationДиректория для хранения снапшотов
chunk_sizeРазбивает большие файлы на фрагменты при создании снапшотов (64 МБ, 1 ГБ и др.). По умолчанию - 1gb. Необязательный параметр
compressBoolean Следует ли сжимать файлы метаданных. По умолчанию - false. Необязательный параметр
max_restore_bytes_per_secМаксимальная скорость восстановления снапшотов. По умолчанию - 40 МБ/с. Необязательный параметр
max_snapshot_bytes_per_secМаксимальная скорость создания снапшотов. По умолчанию - 40 МБ/с. Необязательный параметр
remote_store_index_shallow_copyBoolean. Определяет, будут ли снапшоты индексов записываться как поверхностная копия. По умолчанию - false. Необязательный параметр
shallow_snapshot_v2Boolean. Определяет, будут ли снапшоты индексов записываться как поверхностная копия 2ой версии. По умолчанию - false. Необязательный параметр
readonlyBoolean. Доступен ли репозиторий только для чтения. По умолчанию - false. Необязательный параметр

Настройка автоматического снапшотирования

Для автоматизации сохранения снапшотов кластера необходимо создать политику снапшотирования через консоль разработчика (Навигационное меню - Параметры системы - Консоль разработчика) выполнив команду с необходимыми параметрами:

POST _plugins/_sm/policies/{SNAPSHOT_POLICY_NAME}
{
"name": "snapshot-daily-{{date}}",
"description": "Daily snapshot policy",
"creation": {
"schedule": {
"cron": {
"expression": "0 8 * * *",
"timezone": "UTC"
}
},
"time_limit": "1h"
},
"deletion": {
"schedule": {
"cron": {
"expression": "0 8 * * *",
"timezone": "UTC"
}
},
"condition": {
"max_age": "7d",
"max_count": 50,
"min_count": 30
},
"time_limit": "1h"
},
"snapshot_config": {
"date_format": "yyyy-MM-dd-HH:mm",
"timezone": "UTC",
"indices": [".*"],
"repository": "{REPO_NAME}",
"ignore_unavailable": "true",
"include_global_state": "false",
"partial": "true",
"metadata": {
"any_key": "any_value"
}
}
}

Таблица параметров политики снапшотирования:

ПараметрТипОписание
descriptionStringОписание политики снапшотирования. Необязательный параметр.
enabledBooleanДолжна ли политика быть включена при создании? Необязательный параметр.
snapshot_configObjectНастройки создания политики. Обязательный параметр.
snapshot_config.date_formatStringИмена снапшотов имеют формат {SNAPSHOT_POLICY_NAME}-<дата>-<случайное число>. date_format Определяет формат даты в именах снапшотов. Необязательный параметр. По умолчанию - yyyy-MM-dd’T’HH:mm:ss.
snapshot_config.date_format_timezoneStringИмена снапшотов имеют формат {SNAPSHOT_POLICY_NAME}-<дата>-<случайное число>. date_format_timezone определяет часовой пояс для даты в именах снапшотов. Необязательный параметр. По умолчанию - UTC.
snapshot_config.indicesStringШаблон сохраняемых в снапшотах индексов. По умолчанию - * (все индексы).
snapshot_config.repositoryStringРепозиторий, в который будут сохраняться снапшоты. Обязательный параметр.
snapshot_config.ignore_unavailableBooleanОпределяет нужно ли игнорировать недоступные индексы. Необязательный параметр. По умолчанию - false.
snapshot_config.include_global_stateBooleanОпределяет нужно ли включать состояние кластера в снапшот. Необязательный параметр. По умолчанию - true.
snapshot_config.partialBooleanОпределяет возможность создания неполного снапшота. Необязательный параметр. По умолчанию - false.
snapshot_config.metadataObjectМетадата в формате пар ключ/значение. Необязательный параметр.
creationObjectНастройки создания снапшотов. Обязательный параметр.
creation.scheduleStringРасписание создания снапшотов в формате cron. Обязательный параметр.
creation.time_limitStringОпределяет максимальное время ожидания завершения создания снапшота. Если time_limit дольше интервала расписания создания, то снапшот по не не будет создан до тех пор, пока time_limit не закончится. Необязательный параметр.
deletionObjectНастройки удаления снапшотов. Необязательный параметр. По умолчанию хранит все снапшоты.
deletion.scheduleStringРасписание удаления снапшотов в формате cron. Необязательный параметр. По умолчанию использует настройки параметра creation.schedule.
deletion.time_limitStringОпределяет максимальное время ожидания окончания удаления снапшота. Необязательный параметр.
deletion.delete_conditionObjectУсловия удаления снапшота. Необязательный параметр.
deletion.delete_condition.max_countIntegerМаксимальное количество хранимых снапшотов. Необязательный параметр.
deletion.delete_condition.max_ageStringМаксимальное время, которое хранятся снапшоты. Необязательный параметр.
deletion.delete_condition.min_countIntegerМинимальное количество хранимых снапшотов. Необязательный параметр. По умолчанию - 1.
notificationObjectСодержит настройки уведомлений по событиям политики снапшотирования (для использования требуется настроенный канал уведомлений Opensearch). Необязательный параметр.
notification.channelObjectОпределяет канал для уведомлений. Обязательный параметр.
notification.channel.idStringID канала уведомлений. Обязательный параметр.
notification.conditionsObjectСобытия политики снапшотирования, по которым необходимы уведомления - для этого необходимо установить значение true.
notification.conditions.creationBooleanОпределяет необходимость создания уведомлений о создании снапшота. Необязательный параметр. По умолчанию - true.
notification.conditions.deletionBooleanОпределяет необходимость создания уведомлений об удалении снапшота. Необязательный параметр. По умолчанию - false.
notification.conditions.failureBooleanОпределяет необходимость создания уведомлений об ошибке создания или удаления снапшота. Необязательный параметр. По умолчанию - false.
notification.conditions.time_limit_exceededBooleanОпределяет необходимость создания уведомлений о факте превышения time_limit у операций, связанных со снапшотами. Необязательный параметр. По умолчанию - false.
Информация

Снапшоты инкрементальные — уже сохраненные сегменты повторно не сохраняются.

Создание снапшота вручную

Для разового создания снапшота выполните команду через консоль разработчика:

PUT _snapshot/{REPO_NAME}/{SNAPSHOT_NAME}
{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": false
}

Восстановление из снапшота

  1. Просмотрите доступные снапшоты через консоль разработчика командой:
GET _snapshot/{REPO_NAME}/_all

В результате выполнения команды выведется список всех созданных снапшотов в следующем формате, где поле snapshot - имя снапшота (SNAPSHOT_NAME):

{
"snapshots": [
{
"snapshot": "daily-snapshot-sm-policy-2025-04-21-14:30-bu2lfnek",
"uuid": "iqHGMwR5T6yV-tInX3a5KQ",
"version_id": 136397827,
"version": "2.18.0",
"remote_store_index_shallow_copy": false,
"indices": [
"index1",
"index2"
],
"data_streams": [],
"include_global_state": true,
"metadata": {
"sm_policy": "daily-snapshot-sm-policy"
},
"state": "SUCCESS",
"start_time": "2025-04-21T14:30:02.327Z",
"start_time_in_millis": 1745245802327,
"end_time": "2025-04-21T14:31:09.966Z",
"end_time_in_millis": 1745245869966,
"duration_in_millis": 67639,
"failures": [],
"shards": {
"total": 2,
"failed": 0,
"successful": 2
}
}
]
}
  1. Восстановите нужный снапшот через консоль разработчика командой:
POST _snapshot/{REPO_NAME}/{SNAPSHOT_NAME}/_restore

Удаление снапшота

  1. Просмотрите доступные снапшоты через консоль разработчика командой:
GET _snapshot/{REPO_NAME}/_all

В результате выполнения команды выведется список всех созданных снапшотов в формате, указанном в пункте Восстановление из снапшота.

  1. Удалите нужный снапшот через консоль разработчика командой:
DELETE _snapshot/{REPO_NAME}/{SNAPSHOT_NAME}