Руководство по настройке pgBackRest для PostgreSQL

Руководство по настройке pgBackRest для PostgreSQL

Резервное копирование PostgreSQL с помощью pgBackRest

pgBackRest — это надёжный инструмент для резервного копирования и восстановления PostgreSQL, поддерживающий инкрементальные и дифференциальные бэкапы, шифрование, репозитории на локальном диске и в облаке (S3), а также автоматическое управление архивами WAL.


Установка pgBackRest (Ubuntu/Debian)

sudo apt update
sudo apt install pgbackrest -y

Структура каталогов

Создадим директории для бэкапов и конфигурации:

# Локальное хранилище
sudo mkdir -p /mnt/HC_Volume_102602874/bi_backup   # указать реальный путь
sudo chown postgres:postgres /mnt/HC_Volume_102602874/bi_backup
sudo chmod 750 /mnt/HC_Volume_102602874/bi_backup

# Каталоги конфигурации
sudo mkdir -p /etc/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest

Конфигурация /etc/pgbackrest/pgbackrest.conf

Локальный репозиторий

[global]
log-level-console=info
log-level-file=debug
start-fast=y
retention-archive-type=incr
retention-archive=7

repo1-path=/mnt/HC_Volume_102602874/bi_backup   # указать реальный путь
repo1-retention-full=2
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=pKSm1J+0Px3mXYDceWE6yC2y3lv3xjPZUS6ztXijEuk=

[main]
pg1-path=/var/lib/postgresql/16/main

Репозиторий на S3 (дополнительно)

Можно настроить второй репозиторий для выгрузки в S3. Однако на практике часто используют rclone для копирования бэкапов в облако.

repo2-type=s3
repo2-path=/pgbackrest
repo2-s3-bucket=my-postgres-backups
repo2-s3-endpoint=s3.eu-central-1.amazonaws.com
repo2-s3-region=eu-central-1
repo2-s3-key=AWS_ACCESS_KEY_ID
repo2-s3-key-secret=AWS_SECRET_ACCESS_KEY
repo2-retention-full=4
repo2-cipher-type=aes-256-cbc
repo2-cipher-pass=... # тот же ключ или другой

Можно использовать только repo1, или оба одновременно.


Пояснение ключевых параметров

  • retention-archive — сколько дней хранить WAL-файлы для всего кластера.
  • retention-archive-type — какие WAL можно удалять (full, diff, incr). Обычно: incr.
  • start-fast=y — запуск бэкапа без ожидания чекпоинта.
  • log-level-console / log-level-file — уровни логирования.
  • repoX-path — путь для хранения бэкапов (локально или S3).
  • repoX-retention-full — количество полных бэкапов.
  • repoX-cipher-type — шифрование (рекомендуется AES-256).
  • repoX-cipher-pass — ключ для шифрования.
  • pg1-path — каталог data_directory PostgreSQL.

Шифрование ключей

Для генерации ключа шифрования:

openssl rand -base64 32

Либо сохранить в файл:

sudo -u postgres mkdir -p /etc/pgbackrest/keys
openssl rand -base64 32 | sudo tee /etc/pgbackrest/keys/repo1.key
sudo chmod 600 /etc/pgbackrest/keys/repo1.key

Настройка PostgreSQL для WAL-архивирования

В postgresql.conf:

archive_mode = on
archive_command = 'pgbackrest --stanza=main archive-push %p'

Перезапуск:

sudo systemctl restart postgresql

Инициализация stanza

sudo -u postgres pgbackrest --stanza=main stanza-create
sudo -u postgres pgbackrest --stanza=main check

Убедись, что .pgpass содержит логин/пароль для postgres.


Политики бэкапов (cron)

# Полный бэкап каждое воскресенье
0 2 * * 0 pgbackrest --stanza=main --type=full backup

# Дифференциальный каждый день (кроме вс)
0 2 * * 1-6 pgbackrest --stanza=main --type=diff backup

# Инкрементальный каждые 15 минут
*/15 * * * * pgbackrest --stanza=main --type=incr backup

В конфиге также стоит указать:

retention-archive=7
retention-archive-type=incr

Проверка бэкапов

pgbackrest --stanza=main info

Ожидаем увидеть:

cipher: aes-256-cbc
status: ok
last backup: full/diff/incr...

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

Полное восстановление

sudo systemctl stop postgresql
sudo -u postgres pgbackrest --stanza=main restore
sudo systemctl start postgresql

Восстановление на момент времени (PITR)

sudo -u postgres pgbackrest --stanza=main restore   --type=time --target="2025-05-21 12:45:00"

Мониторинг через Prometheus

Используем pgbackrest_exporter.

Prometheus job:

- job_name: 'pgbackrest'
  static_configs:
    - targets: ['<host-ip>:9898']

Что важно помнить

  • Всегда сохранять ключи шифрования отдельно.
  • Регулярно тестировать восстановление.
  • Следить за свободным местом в repo1-path и S3.
  • Настроить уведомления через Alertmanager.

Заключение

pgBackRest — это мощный инструмент, который позволяет организовать надёжную систему резервного копирования PostgreSQL. При правильной настройке можно минимизировать риск потери данных и обеспечить быструю возможность восстановления как локально, так и в облаке.