Автоматические снимки позволяют Stronghold по расписанию создавать резервные копии встроенного Raft-хранилища и сохранять их на локальный диск или в S3-совместимое объектное хранилище.

Автоматические снимки доступны только при использовании интегрированного Raft-хранилища. Для etcd, postgresql и других внешних backend-ов нужно настраивать резервное копирование средствами самого хранилища.

Когда использовать

Автоматические снимки подходят для регулярного резервного копирования без ручного запуска команд. Они особенно полезны для production-кластеров, где важно иметь повторяемую политику хранения и выносить резервные копии за пределы самого кластера.

Как это работает

  • Можно создать несколько именованных конфигураций снимков.
  • Каждая конфигурация определяет интервал запуска, политику хранения и тип хранилища.
  • Поддерживаются типы хранилища local и aws-s3.
  • Для production-сред локальное хранилище обычно менее предпочтительно, чем внешнее объектное хранилище: активный узел кластера может меняться, а резервные копии лучше хранить отдельно от защищаемой системы.

Создание или обновление конфигурации

МетодПуть
POST/sys/storage/raft/snapshot-auto/config/:name

Для работы с endpoint требуются права sudo.

Основные параметры

ПараметрТипОбязательныйЗначение по умолчаниюОписание
nameСтрокаДаИмя конфигурации, которую нужно создать или обновить.
intervalЦелое число или строкаДаИнтервал между созданием резервных копий. Можно указывать в секундах или в формате Go duration, например 24h.
retainЦелое числоНет3Сколько резервных копий хранить. При превышении лимита самые старые копии удаляются.
storage_typeНеизменяемая строкаДаТип хранилища: local или aws-s3.
path_prefixНеизменяемая строкаДаДля local это директория хранения снимков. Для aws-s3 это префикс объекта в бакете.
file_prefixНеизменяемая строкаНетstronghold-snapshotПрефикс имени файла или объекта.

Дополнительные параметры для local

ПараметрТипОбязательныйЗначение по умолчаниюОписание
local_max_spaceЦелое числоНет0Максимальный объём в байтах, который можно занять резервными копиями с указанным file_prefix в директории path_prefix. Значение 0 отключает проверку.

Дополнительные параметры для aws-s3

ПараметрТипОбязательныйЗначение по умолчаниюОписание
aws_s3_bucketСтрокаДаИмя бакета для хранения резервных копий.
aws_s3_regionСтрокаНетРегион бакета.
aws_access_key_idСтрокаНетИдентификатор ключа доступа к бакету.
aws_secret_access_keyСтрокаНетСекретный ключ доступа к бакету.
aws_s3_endpointСтрокаНетEndpoint S3-сервиса.
aws_s3_disable_tlsБулевыйНетОтключает TLS для S3-endpoint. Используйте только для тестирования.
aws_s3_ca_certificateСтрокаНетCA-сертификат для S3-endpoint в PEM-формате.

Примеры конфигурации

Локальный диск

Следующий файл local-snapshot.json создаёт конфигурацию, которая сохраняет снимок каждые 5 минут в каталог /stronghold/data/backups, хранит 4 копии и использует префикс main_stronghold:

{
  "interval": "5m",
  "path_prefix": "/stronghold/data/backups",
  "file_prefix": "main_stronghold",
  "retain": "4",
  "storage_type": "local"
}
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot.json

Перед применением конфигурации убедитесь, что каталог из path_prefix существует и доступен для записи. Ошибка failed to create snapshot directory at destination обычно означает, что каталог отсутствует или недоступен.

S3-совместимое хранилище

Следующий файл minio-snapshot.json сохраняет снимки в S3-совместимое хранилище:

{
  "interval": "3m",
  "path_prefix": "snapshots",
  "file_prefix": "stronghold_backup",
  "retain": "15",
  "storage_type": "aws-s3",
  "aws_s3_bucket": "my_bucket",
  "aws_s3_endpoint": "minio.domain.ru",
  "aws_access_key_id": "<ACCESS_KEY>",
  "aws_secret_access_key": "<SECRET_ACCESS_KEY>"
}
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-remote-snapshots @minio-snapshot.json

Перед применением конфигурации убедитесь, что бакет уже существует, а указанные учётные данные имеют права на чтение и запись.

Обновление существующей конфигурации

Чтобы изменить только часть параметров, достаточно передать неполный JSON:

{
  "interval": "3m",
  "retain": "10"
}
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot-update.json

Просмотр списка конфигураций

МетодПуть
LIST/sys/storage/raft/snapshot-auto/config
d8 stronghold list sys/storage/raft/snapshot-auto/config

Получение параметров конфигурации

МетодПуть
GET/sys/storage/raft/snapshot-auto/config/:name
d8 stronghold read sys/storage/raft/snapshot-auto/config/my-remote-snapshots

Для aws-s3 значения aws_access_key_id и aws_secret_access_key в ответе не отображаются.

Удаление конфигурации

МетодПуть
DELETE/sys/storage/raft/snapshot-auto/config/:name
d8 stronghold delete sys/storage/raft/snapshot-auto/config/my-remote-snapshots

Удаление конфигурации автоматического резервного копирования не удаляет уже созданные файлы снимков из локального или объектного хранилища.

Получение статуса

МетодПуть
GET/sys/storage/raft/snapshot-auto/status/:name
d8 stronghold read sys/storage/raft/snapshot-auto/status/my-remote-snapshots

Ключевые поля статуса:

  • consecutive_errors — количество подряд идущих ошибок резервного копирования;
  • last_snapshot_end — время завершения последнего успешного снимка;
  • last_snapshot_error — текст последней ошибки;
  • last_snapshot_start — время начала последнего завершённого резервного копирования;
  • last_snapshot_url — адрес последнего успешно созданного снимка;
  • next_snapshot_start — время следующего запуска;
  • snapshot_start — время начала текущего резервного копирования;
  • snapshot_url — адрес текущего создаваемого снимка.

См. также