Резервное копирование
Дата: 2026-01-23
1. Текущее состояние
⚠️ ВНИМАНИЕ: На данный момент централизованная система резервного копирования НЕ НАСТРОЕНА.
Присутствуют только стандартные системные бэкапы Ubuntu:
- /var/backups/ — бэкапы dpkg, apt (ротация автоматическая)
2. Критичные данные для бэкапа
2.1 PostgreSQL (db-1)
| Приоритет | Данные | Размер (оценка) |
|---|---|---|
| 🔴 Критично | База asterisk |
~500 MB |
| 🔴 Критично | Роли и права | Часть dump |
Рекомендуемый метод:
# Полный dump базы
pg_dump -U postgres -Fc asterisk > asterisk_$(date +%Y%m%d).dump
# Только схема
pg_dump -U postgres -s asterisk > asterisk_schema.sql
# Восстановление
pg_restore -U postgres -d asterisk asterisk_YYYYMMDD.dump
2.2 Asterisk конфигурация (voip-1)
| Приоритет | Файлы | Размер |
|---|---|---|
| 🔴 Критично | /etc/asterisk/*.conf |
~100 KB |
| 🟡 Важно | /var/spool/asterisk/monitor/ |
Растёт |
Рекомендуемый метод:
# Конфигурация
tar -czf asterisk_config_$(date +%Y%m%d).tar.gz /etc/asterisk/
# Записи разговоров (опционально)
rsync -av /var/spool/asterisk/monitor/ backup-server:/backups/recordings/
2.3 Redis данные (redis-1)
| Приоритет | Данные | Размер |
|---|---|---|
| 🟡 Важно | RDB snapshot | ~10 MB |
| 🟢 Низкий | AOF log | Variable |
Рекомендуемый метод:
# Redis dump
redis-cli BGSAVE
cp /var/lib/redis/dump.rdb backup/redis_$(date +%Y%m%d).rdb
2.4 Код приложения (web-1, web-2)
| Приоритет | Данные | Размер |
|---|---|---|
| 🟢 Низкий | /opt/callbox/ |
Git managed |
| 🟡 Важно | /var/lib/callbox/ |
User uploads |
Метод: - Код хранится в Git (lb-1 origin) - Загруженные файлы нужно бэкапить отдельно
2.5 SSL сертификаты (lb-1, lb-2)
| Приоритет | Файлы |
|---|---|
| 🔴 Критично | /etc/letsencrypt/ |
Рекомендуемый метод:
tar -czf letsencrypt_$(date +%Y%m%d).tar.gz /etc/letsencrypt/
2.6 Мониторинг данные (mon-1)
| Приоритет | Данные | Размер |
|---|---|---|
| 🟢 Низкий | Prometheus TSDB | ~5 GB |
| 🟢 Низкий | Grafana dashboards | ~10 MB |
3. Рекомендуемая стратегия бэкапа
3.1 Частота бэкапов
| Данные | Частота | Хранение |
|---|---|---|
| PostgreSQL | Ежедневно | 14 дней |
| Asterisk config | При изменении | 7 версий |
| Redis RDB | Ежедневно | 7 дней |
| Recordings | Еженедельно → cold storage | 90 дней |
| SSL certs | При обновлении | 3 версии |
3.2 Целевое хранилище
Рекомендуется: 1. Отдельный сервер бэкапов вне инфраструктуры 2. Или облачное хранилище (S3-compatible)
4. Скрипты для внедрения
4.1 Скрипт бэкапа PostgreSQL
Файл: /opt/scripts/backup-postgres.sh
#!/bin/bash
set -e
BACKUP_DIR="/var/backups/postgres"
RETENTION_DAYS=14
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Создание бэкапа
pg_dump -U postgres -Fc asterisk > "$BACKUP_DIR/asterisk_$DATE.dump"
# Ротация старых бэкапов
find $BACKUP_DIR -name "asterisk_*.dump" -mtime +$RETENTION_DAYS -delete
echo "Backup completed: asterisk_$DATE.dump"
Cron (на db-1):
0 2 * * * /opt/scripts/backup-postgres.sh >> /var/log/backup-postgres.log 2>&1
4.2 Скрипт бэкапа Asterisk
Файл: /opt/scripts/backup-asterisk.sh
#!/bin/bash
set -e
BACKUP_DIR="/var/backups/asterisk"
RETENTION=7
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Бэкап конфигурации
tar -czf "$BACKUP_DIR/asterisk_config_$DATE.tar.gz" /etc/asterisk/
# Ротация
ls -t $BACKUP_DIR/asterisk_config_*.tar.gz | tail -n +$((RETENTION+1)) | xargs -r rm
echo "Backup completed: asterisk_config_$DATE.tar.gz"
Cron (на voip-1):
0 3 * * * /opt/scripts/backup-asterisk.sh >> /var/log/backup-asterisk.log 2>&1
4.3 Скрипт бэкапа Redis
Файл: /opt/scripts/backup-redis.sh
#!/bin/bash
set -e
BACKUP_DIR="/var/backups/redis"
RETENTION_DAYS=7
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Trigger BGSAVE
redis-cli BGSAVE
sleep 5
# Копирование dump
cp /var/lib/redis/dump.rdb "$BACKUP_DIR/redis_$DATE.rdb"
# Ротация
find $BACKUP_DIR -name "redis_*.rdb" -mtime +$RETENTION_DAYS -delete
echo "Backup completed: redis_$DATE.rdb"
Cron (на redis-1):
0 3 * * * /opt/scripts/backup-redis.sh >> /var/log/backup-redis.log 2>&1
5. Восстановление из бэкапа
5.1 PostgreSQL
# Остановка приложений
ssh web-1 "cd /opt/callbox && docker compose stop backend"
ssh web-2 "cd /opt/callbox && docker compose stop backend"
# Восстановление
pg_restore -U postgres -d asterisk --clean asterisk_YYYYMMDD.dump
# Запуск приложений
ssh web-1 "cd /opt/callbox && docker compose start backend"
ssh web-2 "cd /opt/callbox && docker compose start backend"
5.2 Asterisk
# Остановка Asterisk
systemctl stop asterisk
# Восстановление
tar -xzf asterisk_config_YYYYMMDD.tar.gz -C /
# Запуск Asterisk
systemctl start asterisk
asterisk -rx "core reload"
5.3 Redis
# Остановка Redis
systemctl stop redis-server
# Восстановление
cp redis_YYYYMMDD.rdb /var/lib/redis/dump.rdb
chown redis:redis /var/lib/redis/dump.rdb
# Запуск Redis
systemctl start redis-server
6. Проверка бэкапов
6.1 Тестирование PostgreSQL dump
# Создание тестовой БД
createdb -U postgres asterisk_test
# Восстановление в тестовую БД
pg_restore -U postgres -d asterisk_test asterisk_YYYYMMDD.dump
# Проверка
psql -U postgres -d asterisk_test -c "SELECT count(*) FROM organizations;"
# Удаление тестовой БД
dropdb -U postgres asterisk_test
6.2 Чек-лист ежемесячной проверки
- [ ] PostgreSQL dump восстанавливается успешно
- [ ] Количество записей соответствует ожидаемому
- [ ] Asterisk конфиг валидный (
asterisk -C config.conf -r) - [ ] Redis RDB загружается корректно
- [ ] Записи разговоров воспроизводятся
7. Мониторинг бэкапов
7.1 Алерты (рекомендуется добавить в Prometheus)
groups:
- name: backup_alerts
rules:
- alert: PostgresBackupMissing
expr: time() - file_mtime{path="/var/backups/postgres/latest.dump"} > 86400 * 2
for: 1h
labels:
severity: critical
annotations:
summary: "PostgreSQL backup older than 2 days"
- alert: BackupDiskSpaceLow
expr: node_filesystem_avail_bytes{mountpoint="/var/backups"} < 1e9
for: 1h
labels:
severity: warning
annotations:
summary: "Backup disk space below 1GB"
8. TODO: Задачи для внедрения
- [Критично] Настроить ежедневный бэкап PostgreSQL на db-1
- [Критично] Настроить внешнее хранилище для бэкапов
- [Важно] Настроить бэкап конфигурации Asterisk
- [Важно] Настроить бэкап Redis
- [Важно] Добавить алерты на отсутствие бэкапов
- [Средне] Настроить архивирование записей разговоров
- [Низко] Настроить бэкап Prometheus TSDB
9. Ответственность
| Задача | Ответственный |
|---|---|
| Настройка скриптов | DevOps |
| Мониторинг выполнения | DevOps |
| Тестирование восстановления | DevOps + Admin |
| Хранение ключей шифрования | Security |