Перейти к содержанию

Резервное копирование

Дата: 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: Задачи для внедрения

  1. [Критично] Настроить ежедневный бэкап PostgreSQL на db-1
  2. [Критично] Настроить внешнее хранилище для бэкапов
  3. [Важно] Настроить бэкап конфигурации Asterisk
  4. [Важно] Настроить бэкап Redis
  5. [Важно] Добавить алерты на отсутствие бэкапов
  6. [Средне] Настроить архивирование записей разговоров
  7. [Низко] Настроить бэкап Prometheus TSDB

9. Ответственность

Задача Ответственный
Настройка скриптов DevOps
Мониторинг выполнения DevOps
Тестирование восстановления DevOps + Admin
Хранение ключей шифрования Security