L’objet de ce posting est de décrire la mise en place et l’utilisation d’un gestionnaire de sauvegarde pour un cluster de base postgresql. Barman – acronyme de “backup recovery manager”- pour PostgreSQL est le logiciel sur lequel nous nous pencherons. C’est un outil permettant de centraliser la gestion des sauvegardes dans une situation avec plusieurs serveurs.
La société 2ndQuadrant est à l’origine de ce projet qui a été financé par une aide de la CEE.
1 – Installation du serveur de backup.
L’installation de l’outil peut se faire sur un serveur dédié ou sur le serveur PostgreSQL lui-même.
1.1 – Validation des pre-requis
L’installation de Barman nécessite d’avoir un accès root, voici la liste des pré-requis.
- Linux/Unix
- Python 2.6 or 2.7
- Python modules: *
- argh
- psycopg2
- python-dateutil < 2.0 (since version 2.0 requires python3)
- distribute (optional)
- PostgreSQL >= 8.4
- rsync >= 3.0.4
La vérification des modules python peut être faite avec la commande yokl -l
exemple :
root@ubuntu:~# yolk -l | grep psycopg2psycopg2 – 2.4.5 – active development (/usr/local/lib/python2.7/dist-packages/psycopg2-2.4.5-py2.7-linux-x86_64.egg)
Nota : La vérification des modules python peut etre sauté car l’installation vérifie les dépendances et charge les modules nécessaires.
Vérifier l’installation du package python-setuptools est suffisant.
sudo apt-get install python-setuptools Reading package lists... Done Building dependency tree Reading state information... Done python-setuptools is already the newest version.
1.2 – Création de l’utilisateur barman
L’outils a besoin d’un utilisateur gérant les backup
adduser –home /home/barman
1.3 – Création des binaires
Installation des fichiers sources par copie puis extraction de ceux-ci dans un répertoire local, ensuite on construit et installe l’application avec les commandes ci-dessous.
.setup.py build sudo .setup.py install
1.4 – ssh configuration.
Barman a besoin que les connexions entre le serveur de backups et les serveurs PostgreSQL à sauvegarder soient transparentes. Pour cela on paramètre ssh avec une authentification par clef privée, publique. On procède à la création des clefs puis à une copie vers le serveur postgresql. ‘postgres@srvdata1’“, and check in: ~/.ssh/authorized_keysto make sure we haven’t added extra keys that you weren’t expecting.
1.5 – Configuration de la connexion PostgreSQL
Pour que l’outil accéde aux informations à sauvegarder on configure le serveur postgresql en autorisant la connexion depuis le utilisateur barman. Pour cela modifier le fichier pg_hba.conf de votre cluster de base en ajoutant la ligne suivante qui autorise une connexion sans demande de mot de passe entre les deux machines: host postgres postgres 192.168.165.130/32 trust Verifier la bonne communication par la commande ci-dessous depuis votre serveur barman. psql -c ‘SELECT version()’ -U postgres -h srvdata1 -p 54321
1.6 – Création du répertoire de sauvegarde.
Nous utiliserons ici un point de montage /u03
cd /u03 sudo mkdir -p /u03/barman sudo chown barman:barman /u03/barman
1.7 – Configuration de barman.
Elle se fait par copie du fichier barman.conf dans /etc et son adaptation à notre situation
[barman] ; Main directory barman_home = /u03/barman ; System user barman_user = barman; Log location log_file = /home/barman/log/barman.log ; Default compression level: possible values are None (default), bzip2, gzip or custom compression = gzip ; 'main' PostgreSQL Server configuration [dbi] ; Human readable description description = "dbi PostgreSQL Database" ; SSH options ssh_command = ssh postgres@srvdata1 ; PostgreSQL connection string conninfo = host="srvdata1" user="postgres" port=54321
1.8 – Vérification de la configuration
Une fois l’ensemble de ces paramètrages posés, l’outil barman nous permet de vérifier la configuration avec les deux commandes show-server et check, dont vous avez le résultat ci-dessous.
barman@pgbkpsrv:/u03/barman/dbi$ barman show-server dbi Server dbi: active: true description: dbi PostgreSQL Database ssh_command: ssh postgres@srvdata1 conninfo: host="srvdata1" user="postgres" port=54321 backup_directory: /u03/barman/dbi basebackups_directory: /u03/barman/dbi/base wals_directory: /u03/barman/dbi/wals incoming_wals_directory: /u03/barman/dbi/incoming lock_file: /u03/barman/dbi/dbi.lock compression: gzip custom_compression_filter: None custom_decompression_filter: None retention_policy: None wal_retention_policy: None current_xlog: 00000001000000000000001F last_shipped_wal: None archive_command: (disabled) server_txt_version: 9.1.4 data_directory: /u01/pgdata/dbi archive_mode: off config_file: /u01/pgdata/dbi/postgresql.conf hba_file: /u01/pgdata/dbi/pg_hba.conf ident_file: /u01/pgdata/dbi/pg_ident.conf barman@pgbkpsrv:~$ barman check dbi Server dbi: ssh: OK PostgreSQL: OK archive_mode: FAILED (please set it to 'on') archive_command: FAILED (please set it accordingly to documentation) directories: OK compression settings: OK
On constate à l’exécution de ces commandes qu’il nous reste à configurer l’archivage du cluster de base.
2 – Mise en oeuvre d’une sauvegarde
Pour cela nous allons d’abord mettre le cluster de base en mode archive log, nous validerons ensuite la configuration avec les deux commandes utilisées précédemment, enfin nous lancerons un backup.
2.1 – Passage en mode archive log
Il suffit de modifier du fichier postgresql.conf de votre cluster de base en changeant les trois paramètres ci-dessous :
wal_level = 'archive' # For PostgreSQL >= 9.0 archive_mode = on archive_command = 'rsync -a %p barman@pgbkpsrv:/u03/barman/dbi/incoming/%f'
2.2 – restart du serveur postgresql
ostgres@srvdata1:/u01/pgdata/dbi$ pg_ctl restart waiting for server to shut down.... done server stopped server starting
2.3 – Vérification
Lancement de la commande check
barman@pgbkpsrv:/u03/barman/dbi$ barman check dbi Server dbi: ssh: OK PostgreSQL: OK archive_mode: OK archive_command: OK directories: OK compression settings: OK
Nous constatons que tout est conforme.
2.4 – Execution d’un backup.
Il s’agit de lancer la commande à partir du serveur de sauvegarde comme ci-dessous. L’application prendra en charge l’ensemble des étapes pour mettre le cluster de base en mode backup, puis copier les fichiers et finaliser la sauvegarde.
barman@pgbkpsrv$ barman backup dbi barman@pgbkpsrv:/u03/barman/dbi$ barman backup dbi Starting backup for server dbi in /u03/barman/dbi/base/20120809T075347 Backup start at xlog location: 0/4A8DC890 (00000001000000000000004A, 008DC890) Copying files. file has vanished: "/u01/pgdata/dbi/base/16660/pg_internal.init" Copy done. Asking PostgreSQL server to finalize the backup. Backup end at xlog location: 0/4EBE4858 (00000001000000000000004E, 00BE4858) Backup completed
3 – Conclusion
Barman nous fourni un ensemble de commandes nous permettant de mettre en oeuvre des sauvegardes online sur un serveur externe. La mise en oeuvre est simple, je vous propose d’aborder dans un autre post le plus important: la restauration.
Reférence: http://www.pgbarman.org/