Копирование данных платформы


Все данные платформы astra-monitoring хранятся в базе данных Tantor(postgresql).

PostgreSQL предлагает несколько методов резервного копирования. В этой документации рассмотрим процесс бэкапа для:

  • Развертывания через Docker Compose

  • Развертывания через Helm в Kubernetes

Резервное копирование для Docker Compose

Подготовка Docker

  1. Проверьте конфигурацию в docker-compose.yml:

    docker-compose.yml
    services:
      postgres:
        volumes:
        - ./postgresql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
        - ./postgresql/postgresql.conf:/var/lib/postgresql/postgresql.conf:ro
        - ./postgresql/pg_hba.conf:/var/lib/postgresql/pg_hba.conf:ro
        - ./postgresql/data:/var/lib/postgresql/data
        # опциональное хранилище для бэкапов
        - /path/to/backups:/backups
    
  2. Убедитесь, что volume для бэкапов подключен (/path/to/backups)

  3. Установите утилиты для бэкапа:

    shell
    docker exec -it postgres_container bash -c "apt-get update && apt-get install -y postgresql-client-14"
    

Полный бэкап Docker

Использование pg_dump:

shell
docker exec postgres_container pg_dump -U postgres -Fc -f /backups/full_$(date +%Y-%m-%d).dump postgres

Использование pg_basebackup (для кластеров):

shell
docker exec postgres_container pg_basebackup -U postgres -D /backups/base_$(date +%Y-%m-%d) -Ft -z -P

Инкрементальный бэкап Docker

  1. Включите WAL архивирование в postgresql.conf:

    postgresql.conf
    wal_level = replica
    archive_mode = on
    archive_command = 'test ! -f /backups/wal/%f && cp %p /backups/wal/%f'
    
  2. Создайте директорию для WAL:

    shell
    docker exec postgres_container mkdir -p /backups/wal
    
  3. Выполните базовый бэкап:

    shell
    docker exec postgres_container psql -U postgres -c "SELECT pg_start_backup('base_backup');"
    docker cp postgres_container:/var/lib/postgresql/data /backups/base_$(date +%Y-%m-%d)
    docker exec postgres_container psql -U postgres -c "SELECT pg_stop_backup();"
    

Восстановление Docker

Из pg_dump:

shell
docker exec -i postgres_container pg_restore -U postgres -d postgres -c < /backups/full_2023-01-01.dump

Из basebackup + WAL:

  1. Остановите контейнер

  2. Восстановите базовый бэкап:

    shell
    rm -rf /path/to/data/*
    cp -r /backups/base_2023-01-01/* /path/to/data/
    
  3. Создайте recovery.conf:

    recovery.conf
    restore_command = 'cp /backups/wal/%f %p'
    recovery_target_timeline = 'latest'
    
  4. Запустите контейнер

Резервное копирование для Helm развертывания

В astra-monitoring при установке в кластер Kubernetes предусмотрено создание автоматических резервных копий базы данных PostgreSQL (CronJob).

Параметры резервного копирования:

  • Расписание: ежедневно в 2:00 UTC

  • Тип: полные резервные копии (pg_basebackup)

  • Срок хранения: 3 дня

  • Хранилище: PVC Kubernetes pvc-{{ $.Release.Name }}-postgresql-backup

  • Отключение: параметр postgresql.db_backup_enabled: false

Конфигурация работы сервиса в values.yaml:

values.yaml
postgresql:
  # Включить регулярный бекап бд
  db_backup_enabled: "true"
  # Таймаут для подключения к инстансу бд (минуты)
  db_management_timeout: 5