Thank you for reading this post, don't forget to subscribe!
Устанавливаем на сервере PostgreSQL pgbackrest:
sudo yum install pgbackrest
Выдаем права владения postgres:postgres на файл конфига /etc/pgbackrest.conf:
chown postgres:postgres /etc/pgbackrest.conf
Далее, в зависимости от конфигурации, либо создаем локальную директорию для бекапов с владельцем postgres:postgres, либо
монтируем шару (например, /mnt/pgbackup как будет описано далее в инструкции) с тем же владельцем postgres:postgres.
Создаем директорию под бекапы:
mkdir -p /mnt/pgbackup/pgbackrest
Редактируем файл конфига /etc/pgbackrest.conf указывая следующие настройки:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[global] process-max=2 repo1-path=/mnt/pgbackup/pgbackrest log-level-console=info log-level-file=debug start-fast=y [backup_stanza] pg1-path=/postgres/data retention-diff=3 retention-full=2 start-fast=y stop-auto=y |
Где
[global] настройки всего pgbackrest,
[backup_stanza] имя stanza и настройки для бекапов.
В repo1-path необходимо указать путь к директории бекапов, в pg1-path директорию PGDATA PostgreSQL.
retention-full - количество полных бэкапов
retention-diff - количество дифференциальных бэкапов
Важным параметром является process-max. Этот параметр указывает сколько ядер CPU использовать для выполнения сжатия и копирования файлов при бекапе. Правильно подобранный process-max позволяет в разы увеличить скорость бекапа. Его значение следует выставлять в зависимости от имеющегося количества ядер и имеющейся нагрузки на CPU, т.к. если установить, например, его равным всему имеющемуся числу ядер, то бекап начнет мешать работе PostgreSQL. Рекомендуется попробовать сначала выставить process-max в 1/3 часть доступных ядер CPU и дальше по нагрузке во время бекапов решать нужно ли его менять на другое значение.
Так же, можно тюнить параметр compress-level. Этот параметр имеет диапазон значений 0-9, по дефолту выставлен в 6. Он отвечает за степень сжатия бекапов, в настройках его можно указать так же отдельно для архивации WAL (см. User Guide). Тюнинг этого параметра позволяет влиять на размер бекапов в репозитории и скорость бекапирования — чем меньше степень сжатия тем больше места требуется под бекап и быстрее проходит процесс бекапа, и наоборот, при более сильно сжатии потребуется меньше места но больше времени на сам процесс бекапа.
Теперь правим конфиг postgresql.conf и перезапускаем PostgreSQL (после этого WAL будут архивироваться pgbackrest в специальную
директорию archive):
archive_command = 'pgbackrest --stanza=backup_stanza archive-push %p'
archive_mode = on
max_wal_senders = 10
wal_level = replica
systemctl restart postgresql12
После этого создаем stanza и выполняем ее check проверку:
sudo -iu postgres pgbackrest --stanza=backup_stanza stanza-create
sudo -iu postgres pgbackrest --stanza=backup_stanza check
Если все ОК, выполняем full backup:
$ sudo -iu postgres pgbackrest --stanza=backup_stanza --type=full backup
Посмотреть имеющиеся бекапы можно выполнив команду:
sudo -iu postgres pgbackrest info
Пример результата работы команды после выполнения нескольких бекапов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
sudo -iu postgres pgbackrest info stanza: backup_stanza status: ok cipher: none db (current) wal archive min/max (12): 00000002000000000000000B/000000080000000000000025 full backup: 20210711-155322F timestamp start/stop: 2021-07-11 15:53:22 / 2021-07-11 15:53:29 wal start/stop: 00000002000000000000000B / 00000002000000000000000B database size: 40.0MB, database backup size: 40.0MB repo1: backup set size: 4.8MB, backup size: 4.8MB incr backup: 20210711-155322F_20210711-160911I timestamp start/stop: 2021-07-11 16:09:11 / 2021-07-11 16:09:14 wal start/stop: 000000050000000000000012 / 000000050000000000000012 database size: 40.0MB, database backup size: 8.0MB repo1: backup set size: 4.8MB, backup size: 978.2KB backup reference list: 20210711-155322F |
восстановление:
systemctl stop postgresql12
sudo -iu postgres pgbackrest --stanza=backup_stanza restore
восстановление только одной базы:
sudo -iu postgres pgbackrest --stanza=backup_stanza --delta --db-include=test restore
С помощью флага --set скажем, какой бэкап нужно использовать
sudo -u postgres pgbackrest --stanza=backup_stanza --log-level-console=info --delta --type=time --set=20210711-155322F_20210711-160911I "--target=2021-07-11 15:00:24.561458+02" --target-action=promote restore
Настраиваем раписание бекапов в cron, например так:
crontab -e
00 01 * * 3,6 sudo -iu postgres pgbackrest --stanza=backup_stanza --type=full backup
00 01 * * 0-2,4,5 sudo -iu postgres pgbackrest --stanza=backup_stanza --type=incr backup
Бекапы можно выполнять full (полный), diff (дифференциальный) и incr (инкрементальный).
Рекомендуется изучить и потестировать влияние на время выполнения/нагрузку на cpu/коэффициент сжатия параметра
конфига compress-level https://pgbackrest.org/configuration.html#section-general/option-compress-level, его так же можно задать и
для WAL https://pgbackrest.org/user-guide.html#quickstart/configure-archiving