Description
- BARMAN (Backup and Recovery Manager) est un outil open-source pour la gestion des sauvegardes et des restaurations des bases PostgreSQL.
- L’outil permet de gérer à distance la sauvegarde de plusieurs serveurs de bases de données PostgreSQL.
- La documentation de l’outil se trouve ici: http://docs.pgbarman.org/release/2.1/.
Architecture
- BARMAN est généralement installé sur un serveur dédié, à partir duquel on effectue les sauvegardes des serveurs de bases de données distants.
- BARMAN peut être configuré en mode streaming ou en mode rsync/ssh.
- Le mode rsync/ssh est le mode traditionnel, qui utilise ssh et rsync pour effectuer les sauvegardes à distance.
- Le mode streaming s’appuie sur le mécanisme de streaming replication de PostgreSQL, via pg_basebackup.
- Seul le mode rsync/ssh permet à ce jour de bénéficier des fonctionnalités avancées de barman type sauvegardes incrémentales et compression réseau.
- BARMAN gère aussi l’archivage des WAL:
- soit via la méthode traditionnelle, en s’appuyant sur le paramètre PostgreSQL archive_command.
- soit via le WAL streaming, qui permet de réduire considérablement le RPO.
Ci-dessous des graphes d’architecture possible:
- Backup via streaming protocol
- Backup via rsync/ssh
- Backup via rsync/ssh avec wal streaming en plus
Installation
Pour une installation sur Linux Red Hat, il faut, en étant connecté root:
- installer le rpm Extra Packages Enterprise Linux (EPEL) repository.
- installer le rpm barman; cela va notamment créer un user « barman » sur le serveur de backup.
Configuration
Il existe deux types de fichiers de configuration Barman.
- Le fichier de configuration principal /etc/barman.conf, qui contient des paramètres généraux.
- Les fichiers de configuration qui contiennent des paramètres spécifiques à chaque serveur PostgreSQL sauvegardé par Barman; ils sont stockés dans /etc/barman.d et se nomment <nomDeServeur>.conf.
- Il est également possible de stocker les paramètres spécifiques à chaque serveur dans le fichier de configuration principal /etc/barman.conf.
Exemple complet de sauvegarde via rsync/ssh
- Le serveur barman se trouve sur le serveur vs-ol6-lpgsql01
- Le serveur PostgreSQL se trouve sur le serveur vs-ol6-pgsql02
Connexion
- Pour la connexion entre le serveur barman et le serveur PostgreSQL, on crée sur l’instance PostgreSQL un compte barman:
postgres@vs-ol6-pgsql02:POSTGRESQL-5432 /pgsql/9.3>createuser -s -P barman" Enter password for new role:
- Côté serveur barman, on ajoute dans le fichier .pgpass une entrée pour le compte barman, au format: « hostname:port:database:username:password« :
-bash-4.1$ cat ~barman/.pgpass vs-ol6-pgsql02:5432:postgres:barman:barman -bash-4.1$ chmod 600 ~barman/.pgpass
- Côté serveur PostgreSQL, on ajoute la bonne entrée dans le fichier pg_hba.conf, puis on redémarre l’instance.
postgres@vs-ol6-pgsql02:POSTGRESQL-5432 /pgsql/9.3/inst01/data>grep barman /pgsql/9.3/inst01/data/pg_hba.conf host all barman 10.72.11.21/32 md5 postgres@vs-ol6-pgsql02:POSTGRESQL-5432 /pgsql/9.3/inst01/data>pg_restart waiting for server to shut down.... done server stopped server starting
Echange de clés ssh
On configure l’échange de clés ssh entre le serveur barman (pour le compte barman) et le serveur PostgreSQL (pour le compte postgres), pour pouvoir se connecter via ssh sans mot de passe, dans les deux sens.
Fichiers de configuration
- Sur le serveur barman, on crée le fichier de configuration avec les bons paramètres:
[root@vs-ol6-lpgsql01 vs-ol6-pgsql02]# cat /etc/barman.d/vs-ol6-pgsql02.conf [vs-ol6-pgsql02] description = "PostgreSQL server 02" conninfo = host=vs-ol6-pgsql02 user=barman dbname=postgres backup_method = rsync ssh_command = ssh postgres@vs-ol6-pgsql02
- On vérifie que le paramètre configuration_files_directory est décommenté dans /etc/barman.conf:
-bash-4.1$ grep configuration_files_directory /etc/barman.conf configuration_files_directory = /etc/barman.d
Sauvegarde des WAL
- Sur le serveur barman, on vérifie quel est le répertoire destinataire des WAL.
-bash-4.1$ barman show-server vs-ol6-pgsql02 |grep incoming_wals_directory incoming_wals_directory: /var/lib/barman/vs-ol6-pgsql02/incoming
- Sur le serveur PostgreSQL, on modifie le paramètre archive_command en conséquence et on redémarre pour prise en compte.
postgres@vs-ol6-pgsql02:POSTGRESQL-5432 /pgsql/9.3>grep archive_command /pgsql/9.3/inst01/data/postgresql.conf archive_command = 'rsync -a %p barman@vs-ol6-lpgsql01:/var/lib/barman/vs-ol6-pgsql02/incoming/%f' postgres@vs-ol6-pgsql02:POSTGRESQL-5432 /pgsql/9.3/inst01/data>pg_restart waiting for server to shut down.... done server stopped server starting
- Sur le serveur barman, on teste un switch de WAL.
-bash-4.1$ barman switch-xlog --force vs-ol6-pgsql02 Switch to 00000001000000010000003E for server 'vs-ol6-pgsql02' -bash-4.1$ ls -l /var/lib/barman/vs-ol6-pgsql02/incoming/ total 16384 -rw------- 1 barman barman 16777216 Feb 24 14:42 00000001000000010000003D
Sauvegarde de l’instance
- Sur le serveur barman, on vérifie que la configuration est opérationnelle.
-bash-4.1$ barman check vs-ol6-pgsql02 Server vs-ol6-pgsql02: PostgreSQL: OK superuser: OK wal_level: OK directories: OK retention policy settings: OK backup maximum age: OK (no last_backup_maximum_age provided) compression settings: OK failed backups: OK (there are 0 failed backups) minimum redundancy requirements: OK (have 0 backups, expected at least 0) ssh: OK (PostgreSQL server) not in recovery: OK archive_mode: OK archive_command: OK archiver errors: OK
- Sur le serveur barman, on lance un backup complet.
-bash-4.1$ barman backup vs-ol6-pgsql02 Starting backup for server vs-ol6-pgsql02 in /var/lib/barman/vs-ol6-pgsql02/base/20170224T144343 Backup start at xlog location: 1/3E000028 (00000001000000010000003E, 00000028) This is the first backup for server vs-ol6-pgsql02 WAL segments preceding the current backup have been found: 00000001000000010000003A from server vs-ol6-pgsql02 has been removed 00000001000000010000003B from server vs-ol6-pgsql02 has been removed 00000001000000010000003C from server vs-ol6-pgsql02 has been removed 00000001000000010000003D from server vs-ol6-pgsql02 has been removed Copying files. Copy done. Asking PostgreSQL server to finalize the backup. Backup size: 177.8 MiB Backup end at xlog location: 1/3E0000F0 (00000001000000010000003E, 000000F0) Backup completed Processing xlog segments from file archival for vs-ol6-pgsql02 00000001000000010000003E 00000001000000010000003E.00000028.backup