Автоматические снимки позволяют Stronghold по расписанию создавать резервные копии встроенного Raft-хранилища и сохранять их на локальный диск или в S3-совместимое объектное хранилище.
Автоматические снимки доступны только при использовании интегрированного Raft-хранилища. Для etcd, PostgreSQL и других внешних бэкендов нужно настраивать резервное копирование средствами самого хранилища.
Автоматические снимки подходят для регулярного резервного копирования без ручного запуска команд. Они особенно полезны для production-кластеров, где важно иметь повторяемую политику хранения и выносить резервные копии за пределы самого кластера.
Особенности использования автоматических снимков:
- можно создать несколько именованных конфигураций снимков;
- каждая конфигурация определяет интервал запуска, политику хранения и тип хранилища;
- поддерживаются типы хранилища
localиaws-s3; - для production-сред локальное хранилище обычно менее предпочтительно, чем внешнее объектное хранилище: активный узел кластера может меняться, а резервные копии лучше хранить отдельно от защищаемой системы.
Имена снимков формируются в формате <file_prefix>_<RFC3339_timestamp>.tar.gz. Очистка по правилу retain учитывает только файлы или объекты с таким форматом имени в настроенной директории или префиксе.
Менеджер снимков проверяет конфигурации раз в минуту. После создания или обновления конфигурации следующий снимок планируется немедленно; последующие снимки планируются от времени начала предыдущего снимка плюс значение interval.
Настройка сервера (пул загрузок в S3)
Необязательные ключи верхнего уровня в HCL-конфигурации сервера Stronghold задают параметры фоновых загрузок снимков в S3. Речь идёт о файле конфигурации сервера, с которым запускается конкретный узел stronghold server -config config.hcl.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
snapshot_auto_s3_upload_workers | Целое число | 3 | Максимум одновременных фоновых загрузок снимков в S3. Параллельная загрузка используется только между разными конфигурациями снимков. При достижении лимита новые загрузки ожидают в очереди. Допустимый диапазон: 1–32. |
snapshot_auto_upload_pool_shutdown | Строка (duration) | 60s | Количество времени с момента начала остановки цикла автоматических снимков в конкретном узле (по причине завершения процесса, либо потери лидерства узла), после которого происходит принудительное завершение фоновых процессов загрузки. Допустимый диапазон: 1s–15m. |
Пример:
snapshot_auto_s3_upload_workers = 4
snapshot_auto_upload_pool_shutdown = "90s"Увеличивайте число фоновых процессов загрузки, если много конфигураций снимков для S3 и есть запас по сети/CPU; уменьшайте при ограничениях со стороны S3 или узком канале.
Создание или обновление конфигурации
| Метод | Путь |
|---|---|
POST | /sys/storage/raft/snapshot-auto/config/:name |
Для работы с эндпоинтом требуются права sudo.
Основные параметры
| Параметр | Тип | Обязательный | Значение по умолчанию | Описание |
|---|---|---|---|---|
name | Строка | Да | — | Имя конфигурации, которую нужно создать или обновить |
interval | Целое число или строка | Да | — | Интервал между созданием резервных копий. Можно указывать в секундах или в формате Go duration, например 24h, 1h30m. Допускается значение в днях, например 1d; для комбинирования дней с меньшими единицами используйте эквивалентные часы (например, 25h30m вместо 1d1h30m). Минимальное значение — 3m |
retain | Целое число | Нет | 3 | Сколько резервных копий хранить. Очистка запускается только после успешного сохранения или загрузки нового снимка. При превышении лимита самые старые копии удаляются. Значение 0 отключает удаление старых снимков |
storage_type | Неизменяемая строка | Да | — | Тип хранилища: local или aws-s3 |
path_prefix | Строка | Да | — | Для local это директория хранения снимков. Для aws-s3 это префикс объекта в бакете; начальный / игнорируется. Для локального хранилища path_prefix нельзя изменить после создания |
file_prefix | Строка | Нет | stronghold-snapshot | Префикс имени файла или объекта |
file_prefix | Строка | Нет | stronghold-snapshot | Префикс имени файла или объекта. Для локального хранилища file_prefix нельзя изменить после создания |
Дополнительные параметры для 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 | Строка | Нет | — | Эндпоинт S3-сервиса |
aws_s3_disable_tls | Булевый | Нет | false | Отключает TLS для S3-эндпоинта. Используйте только для тестирования |
aws_s3_ca_certificate | Строка | Нет | — | CA-сертификат для S3-эндпоинта в PEM-формате |
retry_enabled | Булевый | Нет | false | Включает повторные попытки загрузки при неудачной отправке снимка в S3 |
retry_max_attempts | Целое число | Нет | 5 | Максимальное количество повторных попыток загрузки после первой неудачной загрузки. Расписание задержек между попытками: 1 минута, 5 минут, 15 минут, далее каждые 30 минут. Значение 0 отключает лимит количества попыток (бесконечные повторы) |
Повторные попытки используют временную копию снимка, оставшуюся после неудачной загрузки. Повторные попытки прекращаются, если достигнут лимит retry_max_attempts, повторные попытки отключены, временный файл недоступен или наступило время следующего планового снимка. Кроме того, повторная попытка должна успеть завершиться минимум за одну минуту до следующего планового снимка; иначе попытка считается неудачной, а следующая планируется согласно расписанию задержек (interval). Ошибки повторных попыток обновляют last_snapshot_error в статусе, но не увеличивают consecutive_errors сверх ошибки исходного планового снимка.
Примеры конфигурации
Локальный диск
Следующий файл 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"
}Перед применением конфигурации убедитесь, что директория из path_prefix существует и доступна для записи. Ошибка failed to create snapshot directory at destination обычно означает, что директория отсутствует или недоступна.
Примените конфигурацию из файла local-snapshot.json следующей командой:
- Stronghold в DKP
- Stronghold в Linux
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot.jsonstronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot.jsonВ примере путь /stronghold/data/ — это путь внутри контейнера, и по умолчанию он смонтирован по пути /var/lib/deckhouse/stronghold/ на master-узлах кластера DKP. Созданные снимки можно найти и скачать с master-узлов по пути /var/lib/deckhouse/stronghold/backups/. При перезагрузке подов снимки останутся неизменными.
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>",
"retry_enabled": true,
"retry_max_attempts": 5
}Перед применением конфигурации убедитесь, что бакет уже существует, а указанные учётные данные имеют права на чтение и запись.
Примените конфигурацию из файла minio-snapshot.json следующей командой:
- Stronghold в DKP
- Stronghold в Linux
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-remote-snapshots @minio-snapshot.jsonstronghold write sys/storage/raft/snapshot-auto/config/my-remote-snapshots @minio-snapshot.jsonОбновление существующей конфигурации
Чтобы изменить только часть параметров, достаточно передать неполный JSON:
{
"interval": "3m",
"retain": "10"
}После любого успешного обновления следующий снимок планируется немедленно.
Примените обновлённую конфигурацию из файла local-snapshot-update.json следующей командой:
- Stronghold в DKP
- Stronghold в Linux
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot-update.jsonstronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot-update.jsonПросмотр списка конфигураций
| Метод | Путь |
|---|---|
LIST | /sys/storage/raft/snapshot-auto/config |
Пример команды:
- Stronghold в DKP
- Stronghold в Linux
d8 stronghold list sys/storage/raft/snapshot-auto/configstronghold list sys/storage/raft/snapshot-auto/configПолучение параметров конфигурации
| Метод | Путь |
|---|---|
GET | /sys/storage/raft/snapshot-auto/config/:name |
Пример команды:
- Stronghold в DKP
- Stronghold в Linux
d8 stronghold read sys/storage/raft/snapshot-auto/config/my-remote-snapshotsstronghold 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 |
Пример команды:
- Stronghold в DKP
- Stronghold в Linux
d8 stronghold delete sys/storage/raft/snapshot-auto/config/my-remote-snapshotsstronghold delete sys/storage/raft/snapshot-auto/config/my-remote-snapshotsУдаление конфигурации автоматического резервного копирования не удаляет уже созданные файлы снимков из локального или объектного хранилища.
Получение статуса
| Метод | Путь |
|---|---|
GET | /sys/storage/raft/snapshot-auto/status/:name |
Пример команды:
- Stronghold в DKP
- Stronghold в Linux
d8 stronghold read sys/storage/raft/snapshot-auto/status/my-remote-snapshotsstronghold read sys/storage/raft/snapshot-auto/status/my-remote-snapshotsКлючевые поля статуса:
consecutive_errors— количество идущих подряд ошибок резервного копирования; обнуляется после успешно завершённой процедуры резервного копирования;last_snapshot_end— время завершения создания последнего успешного снимка;last_snapshot_error— текст последней ошибки при выполнении снимка;last_snapshot_start— время начала создания последнего снимка;last_snapshot_url— адрес последнего успешно созданного снимка;last_rotation_error— текст последней ошибки очистки старых снимков, илиn/a, если очистка прошла успешно; ошибка очистки не переводит успешный снимок в статус ошибки;next_snapshot_start— время следующего запуска запланированного снимка;snapshot_start— время начала текущего создаваемого снимка;snapshot_url— адрес текущего создаваемого снимка;
Дополнительные поля статуса для aws-s3
retry_in_progress— флаг, указывающий что идёт процесс повторных попыток загрузки в S3;retry_attempt— номер текущей попытки загрузки;0, если повторные попытки не активны;