Реализация автоматического восстановления из бэкапа при сбое
Автоматическое восстановление — это следующий уровень после простого наличия бэкапов. Система сама обнаруживает проблему, сама выбирает подходящую точку восстановления, сама поднимает инфраструктуру и сама проверяет результат. Участие человека — только финальная верификация.
Сценарии автоматического восстановления
Corruption данных в БД. Триггер: мониторинг фиксирует аномалию (резкий рост ошибок, несоответствие контрольных сумм). Автоматика: остановить запись в повреждённую БД, восстановить из последнего валидного снапшота, проверить целостность, переключить трафик.
Сбой файловой системы. Триггер: монтирование завершается ошибкой или read-only режим. Автоматика: Terraform создаёт новый инстанс с чистым диском, rsync или S3-sync восстанавливает данные, приложение перезапускается.
Полный выход сервера из строя. Триггер: health check завершается неудачей N раз подряд. Автоматика: Auto Scaling Group (AWS) или аналог поднимает новый инстанс из AMI, cloud-init разворачивает конфигурацию, данные монтируются из персистентного хранилища.
Архитектура для PostgreSQL
Point-in-Time Recovery (PITR) — основа автоматического восстановления для реляционных БД.
WAL архивирование в S3:
# postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'aws s3 cp %p s3://mybackups/wal/%f'
restore_command = 'aws s3 cp s3://mybackups/wal/%f %p'
Базовые снапшоты через pgBackRest или pg_basebackup — раз в сутки в S3.
Автоматизация восстановления:
def auto_restore_postgres(target_time: datetime, db_config: dict):
# 1. Найти ближайший базовый снапшот до target_time
base_backup = find_latest_base_backup_before(target_time)
# 2. Развернуть новый PostgreSQL инстанс
instance = provision_postgres_instance(db_config)
# 3. Восстановить базовый снапшот
restore_base_backup(instance, base_backup)
# 4. Применить WAL-логи до target_time
apply_wal_until(instance, target_time)
# 5. Проверить целостность
verify_database_integrity(instance)
return instance
Утилиты: pgBackRest (лучший выбор для PostgreSQL), Barman, WAL-G (минималистичный, популярен в облаке).
Автоматическое восстановление файлов и медиа
Для S3/объектных хранилищ: AWS S3 Versioning + S3 Object Lock защищают от случайного удаления. Восстановление конкретной версии файла — через AWS Lambda, триггерируемую по SNS-событию или по запросу приложения.
Для файловых систем: снапшоты EBS (AWS) или Persistent Disk (GCP) с расписанием каждые 4-6 часов. Terraform-скрипт восстанавливает том из снапшота и примонтирует к новому инстансу.
Верификация после восстановления
Автоматическое восстановление без верификации — полуготовое решение. Обязательные проверки:
def verify_restoration(instance):
checks = [
check_db_connectivity(instance),
check_row_counts(instance, expected_counts),
check_referential_integrity(instance),
check_recent_data_present(instance, min_age_minutes=5),
run_application_smoke_tests(instance),
]
return all(checks)
Если верификация не прошла — автоматика пробует предыдущую точку восстановления или эскалирует алерт команде.
Оркестрация восстановления
AWS Systems Manager Automation или Ansible playbook, запускаемый по события:
- CloudWatch Alarm → SNS Topic → Lambda function
- Lambda инициирует SSM Automation Document
- SSM выполняет шаги: provision → restore → verify
- По результату: переключить Route 53 или эскалировать в PagerDuty
Для Kubernetes: Velero восстанавливает namespace из снапшота. Operator-паттерн — кастомный Kubernetes Operator следит за состоянием PVC и автоматически восстанавливает при детектировании проблем.
Тестирование автоматического восстановления
Еженедельный scheduled тест: автоматика разворачивает изолированную копию из бэкапа в отдельном окружении, запускает верификацию, присылает отчёт. Если верификация прошла — бэкапы валидны. Если нет — алерт без ожидания реального инцидента.
Метрики для мониторинга
- RTO actual — время от обнаружения проблемы до верификации восстановления
- RPO actual — сколько данных потеряно (разница между последним бэкапом и моментом сбоя)
- Backup freshness — возраст последнего успешного бэкапа каждого компонента
- Restore test success rate — % успешных автоматических тест-восстановлений в месяц
Сроки реализации
- PostgreSQL PITR с WAL архивированием — 3-5 дней
- S3 versioning + Lambda автовосстановление — 2-3 дня
- ASG + cloud-init автовосстановление сервера — 3-5 дней
- Оркестрация + верификация + алерты — 3-5 дней
- Тестирование и документация — 2-3 дня
Итого: 2-3 недели для полноценной системы автоматического восстановления.







