Archivage continu Postgresql avec WAL-E

La sauvegarde de sa base de données est une chose essentielle pour la pérennité de son site. Actuellement je fonctionne sur le principe très basique du dump (pg_dump) de toute ma base de données. Mais cette pratique est loin d’être optimum, et il faut effectuer des dumps assez régulièrement s’il l’on ne veut pas perdre trop de données en cas de crash.

Pour la sauvegarde, il existe un autre moyen avec Postgresql, qui consiste dans un premier temps à enregistrer une sauvegarde complète de la base, et ensuite de ne sauvegarder que les changements apportés à la base sous forme de fichiers WAL. Ainsi « terminé » les gros backups entiers de la base de données, et nous pouvons garder une trace de chaque action effectuée sur la base de données et les rejouer à n’importe quel moment (Point-In-Time Recovery).

Faire des sauvegardes c’est bien, mais faut aussi les sauvegarder quelque part ailleurs que sur le serveur. Sinon en cas de problème avec le disque dur, bye bye la BDD et bye bye les sauvegardes. Et pour cela il existe un très bon outil: Amazon S3. Je ne vais pas détailler ici comment utiliser S3, mais c’est vraiment simple.

Du coup, maintenant nous avons un outil pour effectuer un archivage continu de la base de données, et un outil pour le stockage.

Et il n’existerais pas un outil pour simplifier l’utilisation de ces choses ? Et bien si: WAL-E, à ne pas confondre avec Wall-E 😉

Toute la suite de l’installation se fait sur une Ubuntu 12.04.2 LTS avec Postgresql 9.1.

Installation de WAL-E

On commence avec l’installation des dépendances:

Téléchargement de WAL-E. Pour moi c’est la version 0.6:

Et installation:

Installation de Daemontools

Afin d’exécuter WAL-E dans un environnement sécurisé, nous avons besoin de envdir présent dans la suite Deamontools de D.J. Bernstein.

Préparation:

Téléchargement:

Décompression:

Attention, il est nécessaire de modifier un fichier de configuration afin de pouvoir compiler les daemontools sur Ubuntu.

Modifiez le fichier /package/admin/daemontools/src/conf-cc et ajouter « -include /usr/include/errno.h » à la fin de la première ligne (commande gcc):

Nous pouvons maintenant compiler:

Configuration de WAL-E

Dans un premier temps, nous allons préparer les variables d’environnement nécessaires à l’utilisation de WAL-E. Ces variables sont les informations de connexion à votre S3.

Pour retrouver access-key et secret-key-content, allez ici et connectez-vous.

Nous allons maintenant modifier le fichier /etc/postgresql/9.1/main/postgresql.conf avec les informations suivantes:

J’utilise le chemin entier pour appeler wal-e car sinon la commande ne fonctionne pas.

Il faut maintenant recharger Postgresql afin que la nouvelle configuration soit prise en compte:

Et voila la configuration est terminée !

Sauvegarde complète de la base

Maintenant il est nécessaire de faire un premier backup de votre base de données vers S3, et donc d’exécuter votre première commande WAL-E à partir de l’environnement sécurisé grâce à envdir.

Cela peut prendre quelques secondes à quelques dizaines de minutes en fonction de la taille de votre base de données et de la vitesse d’upload entre votre serveur et Amazon.

A la fin de cette commande, vous devriez trouver 2 nouveaux dossiers dans votre bucket S3. Un dossier pour les backups de base et un dossier pour tous les fichiers WAL.

De nouveaux fichiers WAL sont envoyés très régulièrement vers votre s3.

Restauration des données

Pour récupérer sa base après un crash, il suffit de créer un fichier recovery.conf, qui sera lu au démarrage de Postgresql. Se fichier se place dans /var/lib/postgresql/9.1/main/.

Il est possible de définir dans ce fichier une heure de restauration. Ainsi nous pouvons récupérer l’état de la base à moment bien précis. Si cette variable n’est pas définie, WAL-E essaie de restaurer l’état de la base au plus proche du dernier état.

Vérifier que le fichier recovery.conf appartient bien à postgresql. Sinon:

Maintenant il suffit de démarrer Postgresql

Vous pouvez suivre l’évolution du démarrage à partir des logs:

Une fois la restauration terminée, le fichier recovery.conf devient recovery.done afin d’éviter tout problème en cas de redémarrage du serveur.

Et voilà, votre base a été restaurée.

Créer une nouvelle base de données à partir des sauvegardes

Par exemple pour une machine de développement, il peut être nécessaire de recréer une machine avec une base de données.

Dans un premier temps, il faut bêtement installer Postgresql.

Ensuite supprimer toutes les données présentes dans cette base:

On récupère la dernière version de base avec WAL-E:

Une fois cela terminé, il suffit de reprendre toute la partie Restauration des données, juste au dessus, afin de récupérer la dernière version de la base.

Sauvegarde de base quotidienne

Il est peut être bien d’effectuer une sauvegarde totale de la base tous les jours, afin d’accélérer les remises en production en cas de crash. Ajoutez cette ligne à cron:

Sources:

http://jamesreubenknowles.com/centos5-daemontools-143
https://github.com/wal-e/wal-e
https://gist.github.com/ruckus/2293434

4 thoughts on “Archivage continu Postgresql avec WAL-E

  1. Bonjour,
    est-ce que Wall-e peut fonctionner sans Amazon S3 par ex en archivant les backups sur un autre serveur postgresql distant.?
    Cordialement

  2. Tu cites d’autres types de solution « cloud » mais ma question était simplement de savoir si je pouvais utiliser wall e hors cloud
    en utilisant un stockage classique i.e file system sur serveur distant.
    Cordialement

Laisser un commentaire