Эксплуатация
Инструкция аварийного восстановления
PostgreSQL PITR, снапшоты AACSearch, репликация S3 и процедуры восстановления AACsearch.
Runbook аварийного восстановления
Данный runbook описывает процедуры аварийного восстановления платформы AACsearch. Целевой RTO: 1 час. Целевой RPO: 15 минут.
Архитектура бэкапов
| Компонент | Метод | Расписание | Хранилище |
|---|---|---|---|
| PostgreSQL | WAL-G continuous archiving | Непрерывно | S3 (WAL сегменты) |
| AACSearch | Snapshot API | Каждые 6ч | S3 |
| Приложение | Git (код) + Coolify | При деплое | GitHub + Coolify |
| Загруженные | Прямая запись в S3 | В реальном времени | S3 в другом регионе |
Предварительные требования
Перед любой операцией восстановления убедитесь:
- WAL-G установлен на сервере базы данных
- S3-бакет с правильными разрешениями IAM доступен
- API-ключ поиска доступен
- Есть доступ к панели администратора Coolify
Быстрое восстановление (RTO < 1ч)
1. Восстановление PostgreSQL из WAL-G
# Настройка окружения
export PGDATABASE=aacsearch
export PGHOST=localhost
export PGUSER=postgres
export WALG_S3_PREFIX=s3://aacsearch-backups/postgres/
# Список доступных бэкапов
wal-g backup-list
# Восстановление последнего полного бэкапа
wal-g backup-fetch /var/lib/postgresql/data LATEST
# Создание recovery signal
touch /var/lib/postgresql/data/recovery.signal
# Запуск PostgreSQL
systemctl start postgresql
# Проверка восстановления
psql -c "SELECT pg_is_in_recovery();"2. Восстановление AACSearch из снапшота
# Скачивание последнего снапшота из S3
aws s3 cp s3://aacsearch-backups/AACSearch/latest-snapshot.tar.gz /tmp/
# Остановка AACSearch
systemctl stop AACSearch-server
# Извлечение снапшота в директорию данных
tar -xzf /tmp/latest-snapshot.tar.gz -C /var/lib/AACSearch/data/
# Запуск AACSearch
systemctl start AACSearch-server
# Проверка восстановления
curl "http://localhost:8108/health" -H "X-AACSEARCH-API-KEY: $AACSEARCH_ADMIN_KEY"3. Проверка работоспособности приложения
# Проверка health endpoint API
curl -s http://localhost:3000/api/health
# Проверка Prometheus metrics
curl -s http://localhost:3000/api/metrics | grep aacsearch
# Проверка поиска
curl -X POST http://localhost:3000/api/v1/indexes/example/search \
-H "Content-Type: application/json" \
-d '{"q": "*", "perPage": 1}'Регулярные бэкапы
PostgreSQL (WAL-G)
WAL-G настроен на непрерывное архивирование WAL. Полные бэкапы запускаются ежедневно через cron:
# Ежедневный полный бэкап в 02:00 UTC
0 2 * * * wal-g backup-push /var/lib/postgresql/data
# Проверка последнего бэкапа
wal-g backup-listСнапшот AACSearch
Скрипт снапшота и загрузки (/usr/local/bin/AACSearch-snapshot.sh):
#!/bin/bash
set -euo pipefail
SNAPSHOT_DIR=/tmp/AACSearch-snapshot
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
S3_BUCKET=s3://aacsearch-backups/AACSearch/
# Trigger snapshot via API
curl -X POST "http://localhost:8108/snapshots" \
-H "X-AACSEARCH-API-KEY: $AACSEARCH_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d "{{\"snapshot_path\": \"$SNAPSHOT_DIR\"}}"
# Компрессия и загрузка
tar -czf /tmp/AACSearch-$TIMESTAMP.tar.gz -C $SNAPSHOT_DIR .
aws s3 cp /tmp/AACSearch-$TIMESTAMP.tar.gz $S3_BUCKET
# Очистка
rm -rf $SNAPSHOT_DIR /tmp/AACSearch-$TIMESTAMP.tar.gz
# Обновление указателя на последний снапшот
echo $TIMESTAMP | aws s3 cp - $S3_BUCKET/latest-snapshot.txtУстановка через cron (каждые 6 часов):
0 */6 * * * /usr/local/bin/AACSearch-snapshot.shКонфигурация бэкапов в Coolify
В Coolify настройте следующее расписание бэкапов:
- Перейдите в ваш ресурс → Backups
- Включите Automated Backups
- Расписание:
0 2 * * *(ежедневно в 02:00 UTC) - Количество хранимых бэкапов: 7
- Хранилище: S3-compatible
- Настройте S3 credentials:
- Endpoint:
https://s3.amazonaws.com - Bucket:
aacsearch-backups - Region:
us-east-1
- Endpoint:
Ежемесячная DR-тренировка
Проводите тренировку в первый понедельник каждого месяца.
-
Проверка spare-окружения
- Убедитесь, что spare-окружение доступно
- Проверьте возможность деплоя из текущего git ref
-
Восстановление PostgreSQL
- Скачайте последний WAL-G бэкап
- Восстановите и проверьте целостность БД
- Запустите
VACUUM ANALYZE
-
Восстановление AACSearch
- Скачайте последний снапшот
- Восстановите и проверьте результаты поиска
-
Тестирование приложения
- Проверьте
/api/health - Выполните тестовый поисковый запрос
- Проверьте аутентификацию API ключей
- Проверьте, что widget JS отдаётся корректно
- Проверьте
-
Проверка метрик
- Prometheus targets в UP
- Grafana панели показывают данные
- Нет критических алертов
-
Подписание
- Запишите результаты тренировки в wiki
- Отметьте найденные проблемы
- Обновите runbook при необходимости
Контакты для алертов
| Роль | Контакт |
|---|---|
| Инфраструктура | Через PagerDuty (расписание: infra) |
| Администратор БД | Через PagerDuty (расписание: dba) |
| Безопасность | security@aacsearch.com |
Связанные ресурсы
- Prometheus Alert Rules — конфигурация Alertmanager
- Grafana Dashboards — панели инфраструктуры
- WAL-G Documentation — инструмент бэкапа PostgreSQL
- AACSearch Snapshots — руководство по бэкапу AACSearch