Настройка снапшотирования кластера 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 для выполнения команд. Необходимо создать директорию и настроить её права:
- Создайте каталог для хранения снапшотов и выдайте права на чтение и запись пользователю
opensearch
:
mkdir -p $BACKUP_DIR
chown -R opensearch:opensearch $BACKUP_DIR
- Настройте конфигурацию узла
$OPENSEARCH_HOME/opensearch.yml
любым удобным редактором добавив параметрpath.repo
с путем до созданной директории:
path.repo: ["{BACKUP_DIR}"]
Не рекомендуется размещать path.repo
на том же диске, где хранятся данные узла.
Указанный путь должен быть одинаковым на всех узлах, участвующих в создании снапшотов. Если хотя бы один узел не имеет доступа — операция сохранения может завершиться с ошибкой.
- Перезапустите узел, чтобы изменения вступили в силу:
systemctl restart opensearch
Подготовка репозитория снапшотов
Необходимо создать репозиторий снапшотов с указанием необходимых параметров. Поддерживаются FS, S3, HDFS и прочие типы хранилищ.
В данной статье приводится конфигурация снапшотирования с типом хранилища FS (файловая система).
PUT /_snapshot/{REPO_NAME}
{
"type": "fs",
"settings": {
"location": "{BACKUP_REPO}"
}
}
Таблица всех параметров FS репозитория снапшотов:
Параметр | Назначение |
---|---|
location | Директория для хранения снапшотов |
chunk_size | Разбивает большие файлы на фрагменты при создании снапшотов (64 МБ, 1 ГБ и др.). По умолчанию - 1gb . Необязательный параметр |
compress | Boolean Следует ли сжимать файлы метаданных. По умолчанию - false . Необязательный параметр |
max_restore_bytes_per_sec | Максимальная скорость восстановления снапшотов. По умолчанию - 40 МБ/с . Необязательный параметр |
max_snapshot_bytes_per_sec | Максимальная скорость создания снапшотов. По умолчанию - 40 МБ/с . Необязательный параметр |
remote_store_index_shallow_copy | Boolean . Определяет, будут ли снапшоты индексов записываться как поверхностная копия. По умолчанию - false . Необязательный параметр |
shallow_snapshot_v2 | Boolean . Определяет, будут ли снапшоты индексов записываться как поверхностная копия 2ой версии. По умолчанию - false . Необязательный параметр |
readonly | Boolean . Доступен ли репозиторий только для чтения. По умолчанию - 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"
}
}
}
Таблица параметров политики снапшотирования:
Параметр | Тип | Описание |
---|---|---|
description | String | Описание политики снапшотирования. Необязательный параметр . |
enabled | Boolean | Должна ли политика быть включена при создании? Необязательный параметр . |
snapshot_config | Object | Настройки создания политики. Обязательный параметр . |
snapshot_config.date_format | String | Имена снапшотов имеют формат {SNAPSHOT_POLICY_NAME}-<дата>-<случайное число> . date_format Определяет формат даты в именах снапшотов. Необязательный параметр . По умолчанию - yyyy-MM-dd’T’HH:mm:ss . |
snapshot_config.date_format_timezone | String | Имена снапшотов имеют формат {SNAPSHOT_POLICY_NAME}-<дата>-<случайное число> . date_format_timezone определяет часовой пояс для даты в именах снапшотов. Необязательный параметр . По умолчанию - UTC . |
snapshot_config.indices | String | Шаблон сохраняемых в снапшотах индексов. По умолчанию - * (все индексы). |
snapshot_config.repository | String | Репозиторий, в который будут сохраняться снапшоты. Обязательный параметр . |
snapshot_config.ignore_unavailable | Boolean | Определяет нужно ли игнорировать недоступные индексы. Необязательный параметр . По умолчанию - false . |
snapshot_config.include_global_state | Boolean | Определяет нужно ли включать состояние кластера в снапшот. Необязательный параметр . По умолчанию - true . |
snapshot_config.partial | Boolean | Определяет возможность создания неполного снапшота. Необязательный параметр . По умолчанию - false . |
snapshot_config.metadata | Object | Метадата в формате пар ключ/значение. Необязательный параметр . |
creation | Object | Настройки создания снапшотов. Обязательный параметр . |
creation.schedule | String | Расписание создания снапшотов в формате cron. Обязательный параметр . |
creation.time_limit | String | Определяет максимальное время ожидания завершения создания снапшота. Если time_limit дольше интервала расписания создания, то снапшот по не не будет создан до тех пор, пока time_limit не закончится. Необязательный параметр . |
deletion | Object | Настройки удаления снапшотов. Необязательный параметр . По умолчанию хранит все снапшоты. |
deletion.schedule | String | Расписание удаления снапшотов в формате cron. Необязательный параметр . По умолчанию использует настройки параметра creation.schedule . |
deletion.time_limit | String | Определяет максимальное время ожидания окончания удаления снапшота. Необязательный параметр . |
deletion.delete_condition | Object | Условия удаления снапшота. Необязательный параметр . |
deletion.delete_condition.max_count | Integer | Максимальное количество хранимых снапшотов. Необязательный параметр . |
deletion.delete_condition.max_age | String | Максимальное время, которое хранятся снапшоты. Необязательный параметр . |
deletion.delete_condition.min_count | Integer | Минимальное количество хранимых снапшотов. Необязательный параметр . По умолчанию - 1 . |
notification | Object | Содержит настройки уведомлений по событиям политики снапшотирования (для использования требуется настроенный канал уведомлений Opensearch). Необязательный параметр . |
notification.channel | Object | Определяет канал для уведомлений. Обязательный параметр . |
notification.channel.id | String | ID канала уведомлений. Обязательный параметр . |
notification.conditions | Object | События политики снапшотирования, по которым необходимы уведомления - для этого необходимо установить значение true . |
notification.conditions.creation | Boolean | Определяет необходимость создания уведомлений о создании снапшота. Необязательный параметр . По умолчанию - true . |
notification.conditions.deletion | Boolean | Определяет необходимость создания уведомлений об удалении снапшота. Необязательный параметр . По умолчанию - false . |
notification.conditions.failure | Boolean | Определяет необходимость создания уведомлений об ошибке создания или удаления снапшота. Необязательный параметр . По умолчанию - false . |
notification.conditions.time_limit_exceeded | Boolean | Определяет необходимость создания уведомлений о факте превышения time_limit у операций, связанных со снапшотами. Необязательный параметр . По умолчанию - false . |
Снапшоты инкрементальные — уже сохраненные сегменты повторно не сохраняются.
Создание снапшота вручную
Для разового создания снапшота выполните команду через консоль разработчика:
PUT _snapshot/{REPO_NAME}/{SNAPSHOT_NAME}
{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": false
}
Восстановление из снапшота
- Просмотрите доступные снапшоты через консоль разработчика командой:
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
}
}
]
}
- Восстановите нужный снапшот через консоль разработчика командой:
POST _snapshot/{REPO_NAME}/{SNAPSHOT_NAME}/_restore
Удаление снапшота
- Просмотрите доступные снапшоты через консоль разработчика командой:
GET _snapshot/{REPO_NAME}/_all
В результате выполнения команды выведется список всех созданных снапшотов в формате, указанном в пункте Восстановление из снапшота
.
- Удалите нужный снапшот через консоль разработчика командой:
DELETE _snapshot/{REPO_NAME}/{SNAPSHOT_NAME}