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/