Руководство по настройке 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_directoryPostgreSQL.
Шифрование ключей
Для генерации ключа шифрования:
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. При правильной настройке можно минимизировать риск потери данных и обеспечить быструю возможность восстановления как локально, так и в облаке.