PgBackRest . менеджер бэкапов для postgres

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 ука­зы­вая сле­ду­ю­щие настройки:

Где
[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

При­мер резуль­та­та рабо­ты коман­ды после выпол­не­ния несколь­ких бекапов:

 

вос­ста­нов­ле­ние:

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