Barman. менеджер бэкапов для серверов PostgreSQL

Thank you for reading this post, don't forget to subscribe!

Barman (backup and recovery manager) — внут­рен­няя раз­ра­бот­ка ком­па­нии 2ndQuadrant, предо­став­ля­ю­щей услу­ги на базе PostgreSQL. Пред­на­зна­чен для физи­че­ско­го бэка­па PostgreSQL (логи­че­ский не под­дер­жи­ва­ет), архи­ви­ро­ва­ния WAL и быст­ро­го вос­ста­нов­ле­ния после сбо­ев. Под­дер­жи­ва­ют­ся уда­лен­ный бэкап и вос­ста­нов­ле­ние несколь­ких сер­ве­ров, функ­ции point-in-time-recovery (PITR), управ­ле­ние WAL. Для копи­ро­ва­ния и пода­чи команд на уда­лен­ный узел исполь­зу­ет­ся SSH, син­хро­ни­за­ция и бэкап при помо­щи rsync поз­во­ля­ет сокра­тить тра­фик. Так­же Barman инте­гри­ру­ет­ся со стан­дарт­ны­ми ути­ли­та­ми bzip2, gzip, tar и подоб­ны­ми. В прин­ци­пе, мож­но исполь­зо­вать любую про­грам­му сжа­тия и архи­ви­ро­ва­ния, инте­гра­ция не зай­мет мно­го вре­ме­ни. Реа­ли­зо­ва­ны раз­лич­ные сер­вис­ные и диа­гно­сти­че­ские функ­ции, поз­во­ля­ю­щие кон­тро­ли­ро­вать состо­я­ние сер­ви­сов и регу­ли­ро­вать поло­су про­пус­ка­ния. Под­дер­жи­ва­ют­ся Pre/Post-скрип­ты.

Barman напи­сан на Python, управ­ле­ние поли­ти­ка­ми резерв­но­го копи­ро­ва­ния про­из­во­дит­ся при помо­щи понят­но­го INI-фай­ла barman.conf, кото­рый может нахо­дить­ся в /etc или домаш­нем ката­ло­ге поль­зо­ва­те­ля. В постав­ке идет гото­вый шаб­лон с подроб­ны­ми ком­мен­та­ри­я­ми внут­ри. Рабо­та­ет толь­ко на *nix-систе­мах. Для уста­нов­ки в RHEL, CentOS и Scientific Linux сле­ду­ет под­клю­чить EPEL — репо­зи­то­рий, в кото­ром содер­жат­ся допол­ни­тель­ные пакеты

 

sudo yum update
sudo yum install barman

В PostgreSQL создай­те поль­зо­ва­те­ля barman с пра­вом супер­поль­зо­ва­те­ля для опе­ра­ций резерв­но­го копи­ро­ва­ния и поль­зо­ва­те­ля streaming_barman с пра­вом репли­ка­ции для опе­ра­ций пото­ко­вой передачи.

createuser --superuser barman
createuser --replication streaming_barman

Или, под­клю­чив­шись к psql, мы можем создать его сле­ду­ю­щим образом:

Мы редак­ти­ру­ем файл pg_hba.conf, что­бы поль­зо­ва­тель мог под­клю­чить­ся к базе данных.


Служ­ба PostgreSQL тре­бу­ет пере­за­груз­ки, что­бы изме­не­ния в фай­ле pg_hba.conf всту­пи­ли в силу. Под­клю­чив­шись к psql, мы можем сде­лать это с помо­щью сле­ду­ю­щей команды.

SELECT pg_reload_conf();

Мы можем про­ве­рить доступ создан­но­го нами бар­ме­на с помо­щью коман­ды ниже.

Мы можем про­ве­рить доступ поль­зо­ва­те­ля streaming_barman сле­ду­ю­щим образом.

vim /var/lib/pgsql/12/data/postgresql.conf

 

Настройка barmen

У Barman есть 2 типа фай­лов конфигурации:

  • barman.conf
  • barman.d

/etc/barman/barman.conf  -> Это гло­баль­ный файл кон­фи­гу­ра­ции. Он содер­жит общие кон­фи­гу­ра­ции резерв­но­го копи­ро­ва­ния, такие как файл жур­на­ла, поль­зо­ва­те­ля резерв­но­го копи­ро­ва­ния, ката­лог резерв­но­го копирования.

Отре­дак­ти­руй­те файл barman.conf сле­ду­ю­щим образом:

cat /etc/barman.conf

cat /etc/barman.d/pg.conf

 

/etc/barman.d  -> Фай­лы кон­фи­гу­ра­ции сер­ве­ра по умол­ча­нию рас­по­ло­же­ны в ката­ло­ге /etc/barman.d. В этом ката­ло­ге доступ­ны фай­лы кон­фи­гу­ра­ции шаб­ло­на для мето­дов резерв­но­го копи­ро­ва­ния (пото­ко­вая пере­да­ча и rsync).

Вы може­те создать файл кон­фи­гу­ра­ции для каж­до­го кла­сте­ра PostgreSQL, для кото­ро­го вы хоти­те создать резерв­ную копию с помо­щью Barman, исполь­зуя эти фай­лы шаблонов.

Преж­де все­го, ско­пи­руй­те файл streaming-server.conf-template из фай­лов шаб­ло­нов с име­нем ката­ло­га дан­ных кла­сте­ра и отре­дак­ти­руй­те файл.

Созда­ем сло­ты коман­дой barmen:

su - barman
barman receive-wal --create-slot 12_data

Про­ве­рить настрой­ки пото­ко­вой пере­да­чи фай­лов WAL;

su - barman
barman switch-wal --force --archive 12_data

Проверить конфигурацию barmen

Вы може­те про­ве­рить кон­фи­гу­ра­цию Barman сле­ду­ю­щим образом.

barman check 12_data

barmen - создать резервную копию

Вы може­те создать первую резерв­ную копию с помо­щью сле­ду­ю­щей команды.

barman backup 12_data --wait

Вы може­те про­ве­рить общее состо­я­ние сер­ве­ра сле­ду­ю­щим образом.

barman status 12_data

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

Восстановить кластер PostgreSQL с помощью Barman

Вы може­те вос­ста­но­вить резерв­ную копию в ката­лог на сер­ве­ре, доступ­ном поль­зо­ва­те­лю бар­ме­на, сле­ду­ю­щим образом.

barman recover <Server_Name> <Backup_ID> <Recovery_Directory>

barmen точка восстановления времени

Для вос­ста­нов­ле­ния на момент вре­ме­ни мы можем ука­зать вре­мя с помо­щью пара­мет­ра target-time.

barman recover 12_data 20200113T230114 /db/pg_data/12/data --target-time "Mon Jan 13 23:20:29 +03 2020"

 

 

======================================================================================================

 

Коман­да про­вер­ки резерв­но­го копи­ро­ва­ния базы данных
1. Про­смот­ри­те сер­вер базы дан­ных прослушивания
barman list-server
2, про­вер­ка статуса
barman check vlnx053003.foneshare.cn
barman status vlnx053003.foneshare.cn
3, про­вер­ка конфигурации
barman show-server vlnx053001.foneshare.cn
4, про­верь­те набор резерв­ных копий
barman list-backup all | vlnx053001.foneshare.cn
5. Про­смотр допол­ни­тель­ных дета­лей ука­зан­но­го набо­ра резерв­ных копий
barman show-backup vlnx053001.foneshare.cn 20180319T130006
6. Про­смот­ри­те все дан­ные фай­ла в ука­зан­ном набо­ре резерв­но­го копирования
barman list-files --target data vlnx053001.foneshare.cn 20180319T130006
ba
7, про­верь­те инфор­ма­цию о состо­я­нии копирования
barman replication-status  vlnx053001.foneshare.cn
Коман­да вос­ста­нов­ле­ния базы данных
Marman Restore Command
1, мест­ное восстановление
barman recover --target-time "2018-04-27 18:04:09+08:00"  /opt/postgresql/newdata
2, уда­лен­ное восстановление
Оста­но­ви­те PG Service First
[postgres@vlnx107001 postgresql]$ pg_ctl -D /opt/postgresql/data stop
Создай­те новый ката­лог во вре­мя страхования
[Postgres @ vlnx107001 postgresql] $ mkdir newdatamkdir newdata #
[postgres@vlnx107001 postgresql]$ chmod 0700 newdata
[barman@vlnx107003 ~]$  barman recover --target-time "2018-04-27 18:04:09+08:00" --remote-ssh-command "ssh postgres@vlnx107001.firstshare.cn" vlnx107001.firstshare.cn 20180427T180409  /opt/postgresql/newdata
=========================================================================================================================================================
лич­ный пример
Есть 2 сер­ве­ра с postgres-12
постав­ле­ны вот этой ролью:
https://github.com/midnight47/ansible-playbook/blob/master/playbooks/roles_play/databases.yml
postgres-1  192.168.1.171
postgres-2  192.168.1.172
barman        192.168.1.170