Table des matières

Implémentation de la sauvegarde

Les bases de données sur l’architecture de Picasoft ne sont pas redondés. Pour pallier ce problème, un conteneur sauvegarde périodiquement le contenu des bases de données.

Note:

Par convention, les sauvegardes sont stockés dans /DATA/BACKUP/<service> sur les machines.

Note:

Le conteneur de sauvegarde est le même sur toutes les machines, et s’appelle db-backup.

Lien:

Le code utilisé pour gérer les backups se trouve sur ce dépôt.

Historique

La mise en place d’un système de sauvegarde pouvant gérer plusieurs bases de données (PostgreSQL, MySQL et MongoDB) s’est fait dans un objectif de simplification de l’infrastructure et de scalabilité.

Nous disposions avant le changement de 2 images Docker (une pour MySQL, une pour PostgreSQL). Chacune des images Docker contenait un script (nommé run.sh), qui effectuait la sauvegarde d’une seule base de donnée, dont les paramètres étaient précisés au lancement du conteneur par variables d’environnement. Pour chaque base de donnée, il était donc nécessaire de lancer une image Docker différente.

À terme, une telle solution semble peu adaptée, ainsi une image de sauvegarde unique semble être une meilleure solution pour plusieurs raisons :

Trois questions se posent alors :

La solution retenue a été d’utiliser des listes dans des variables d’environnements, qui seront interprétée par un script Shell.

Création des backups

Comme vu dans l’historique, ce système de backup a connu plusieurs évolutions : * D’abord des scripts ad-hoc pour MySQL et PostgreSQL, capables de gérer une seule base de données * Ensuite une configuration via des variables d’environnement, lues dans des tableaux Bash, qui appellent les scripts ad-hoc * Enfin, une configuration via un fichier JSON, lu en Python, qui créé les variables d’environnement, lues dans des tableaux Bash […]

Ce qui donne un côté un peu bigarré à l’ensemble. Pour résumer :

Périodicité

Les scripts ad-hoc (comme mysql-run.sh) ne créent en fait pas directement de backups. Ils créent un script de backup et un script de restauration pour chaque base de données.

Note:

Ces scripts sont nommés <service>-backup.sh et <nomservice>-restore.sh et sont placés à la racine du conteneur.

Le fichier <service>-backup.sh est rajouté à la crontab du conteneur avec une fréquence d’exécution égale à celle définie dans la configuration.

Le lancement du script effectue enfin un dump de la base de données dans l’archive /backup/<nomservice>/<DATE>.tar.gz.

Un paramètre de configuration permet de déclencher immédiatement un backup au démarrage du conteneur, sans attendre que cron ne s’en occupe.