Les sauvegardes, c'est bien, on est tous d'accord là dessus. Ça devient nettement moins sympa quand il faut les mettre en place. En général, deux solutions se présentent, utiliser une bonne grosse usine à gaz type BackupPC, ou coder tout à la main à base de rsync + hardlinks ou autres tar incrémentaux pour pouvoir faire ce qu'on veut, et surtout pour savoir ce qu'on fait.
La solution dont je vais vous parler se place précisément entre les deux. Vous êtes adminsys, vous n'avez pas besoin d'une interface web pour gérer vos backups. Par contre, vous n'avez pas envie pour autant d'aller systématiquement tout coder en shellscript. Gérer les crontab, les erreurs, les différents dumps avant les copies distantes, etc… Backupninja permet de configurer tout ça sans se prendre la tête, et plus encore.
Puller… Pusher…
Bien qu'il soit tout à fait possible de faire des sauvegardes en local (sur un disque dur externe, par exemple), nous allons nous intéresser ici au cas où elles sont effectuées en réseau d'une machine à une autre. Pour les backups distantes, vous n'avez pas 150 stratégies. En gros vous en avez deux, puller ou pusher.
- Puller, ça consiste à mettre le script de backup sur la machine qui va rappatrier les sauvegardes depuis la machine sauvegardée. Vu qu'on automatise les sauvegardes, ça veut dire que la machine qui stocke les sauvegardes a un accès root sans mot de passe sur la machine à sauvegarder.
- Pusher, c'est l'inverse. On met le script de backup sur la machine sauvegardée, qui va donc envoyer elle-même ses sauvegardes vers la machine qui les stocke. Vu qu'on automatise, ça veut dire que la machine sauvegardée a un accès sans mot de passe (pas forcément root) sur la machine qui stocke les sauvegardes.
Il n'y a pas une stratégie qui soit meilleure que l'autre. Tout dépend des situations et des outils utilisés pour les sauvegardes. Rsyncd, par exemple, permet de donner un accès à des répertoires prédéfinis depuis une IP prédéfinie, en lecture seule si besoin, avec un simple mot de passe qui sera passée en argument à rsync. Donc pas besoin d'accès root, ça permet de sécuriser nettement le choix du "pull". Si vous cherchez à sauvegarder une machine, les deux cas se valent.
Dans mon cas, j'avais besoin d'automatiser la sauvegarde d'une 15ene de machines. Les différences en terme de sécurité entre les deux solutions commencent à apparaître.
- Pull : Une machine a accès root (au moins en lecture) sans mot de passe à toutes les machines du réseau.
- Push : Toutes les machines du réseau ont accès en écriture sans mot de passe à la machine qui stocke les sauvegardes, et donc potentiellement aux données des autres machines du réseau, puisqu'elles sont toutes sauvegardées au même endroit.
Je suis parti sur l'option Push. J'ai tendance à penser qu'elle est plus sécurisée (il suffit d'utiliser un utilisateur différent par machine, et elles ne pourront pas accéder aux backups des autres machines), et elle s'adapte mieux à l'outil que je vais utiliser pour les synchronisations, rdiff-backup, qui ne permet pas de limiter l'accès en lecture, contrairement à rsyncd. En plus, j'ai de toutes façon besoin d'effectuer quelques sauvegardes en local, notamment des dumps MySQL, PostgresSQL et LDAP qui seront rapatriés avec les fichiers.
Quoiqu'il en soit, l'outil que je vais présenter gère parfaitement les deux politiques, donc vous pouvez toujours choisir celle qui vous convient le mieux.
J'ajoute aussi que backupninja permet d'effectuer des sauvegardes incrémentales, c'est à dire qu'il ne stockera que les modifications faites depuis la dernière sauvegarde, et ceci sur un roulement de X jours (7, par exemple, ou 60 si vous avez de la place). Ça veut dire qu'en cas de problème, vous pouvez récupérer n'importe laquelle des X dernières sauvegardes effectuées. On ne fait pas des sauvegardes que pour parer aux problèmes matériels, mais aussi pour les erreurs humaines. Si vous supprimez un fichier par accident, vous pourriez mettre plusieurs jours à vous en rendre compte, et ce serait dommage de ne pas pouvoir le retrouver dans vos sauvegardes.
Mise en place
Maintenant qu'on a vu comment procéder, voyons la mise en place.
Tout d'abord, l'installation. Sur Debian c'est tout simple, sudo aptitude install backupninja. Si vous voulez recevoir des rapports par mail, profitez-en pour configurer le serveur mail à coup de sudo dpkg-configure exim4-config, ça ne fera pas de mal.
Backupninja s'administre par des fichiers de configurations très lisibles et très bien commentés.
/etc/backupninja.confcontient la configuration générale de backupninja. Ici, vous ne configurez pas les politiques de sauvegardes mais l'heure des sauvegardes (1h du matin, par défaut), l'adresse mail à prévenir en cas de problème (root), etc…/etc/backup.d/contient les sauvegardes à effectuer. Vous trouverez des exemples de fichiers de configuration dans/usr/share/backupninja. Vous pouvez y mettre autant de fichiers que vous le voulez, en respectant les bonnes conventions de nommage. Ces fichiers seront exécutés par ordre alphabétique. Typiquement, visez bien pour faire un dump SQL avant d'expédier vos répertoires (y compris le dump) sur le serveur distant. Mais j'ai dit que ce serait simple et efficace, donc ne commencez pas à ajouter des fichiers de configuration maintenant, il y a mieux !
Ninjahelper
Backupninja est livré avec un outil vraiment très pratique, ninjahelper. Vous ne le savez pas encore, mais c'est exactement ce qu'il vous manquait pour mettre en place vos sauvegardes sans vous prendre la tête.
Lancez simplement sudo ninjahelper.
Vous n'avez plus qu'à choisir ce que vous voulez sauvegarder. Commencez par exemple par MySQL pour faire un dump de vos bases là où vous le voulez (typiquement dans /var/backup). Vous êtes déjà root, pas besoin du moindre mot de passe.
Ensuite, passez à l'étape intéressante, les backups incrémentales des répertoires. Ninjahelper gère par défaut plusieurs outils, rdiff-backup notamment. Cet outil dispose d'un avantage conséquent, il simule son propre filesystem sur la machine destinataire, ce qui permet une bien meilleure sécurité des données sauvegardées. En effet, les droits sur les fichiers (propriétaires + droits) sont sauvegardés par rdiff-backup, et non par le système de fichier de la machine destinataire. Du coup, si vous voulez sauvegarder un fichier appartenant à root, vous n'avez pas besoin d'être root sur la machine destinataire pour conserver les droits (on ne peut pas créer un fichier appartenant à root sans être root). Un autre énorme avantage de rdiff-backup, c'est que vous avez constamment accès à la dernière version des données, car il enregistre les modifications vers le passé. À l'inverse, avec rsync+hardlink, vous stockez la plus ancienne version (snapshot), puis les modifications vers le présent.
Ninjahelper va gérer absolument toute la procédure de mise en place des backups en mode push. Après avoir spécifié les fichiers à sauvegarder et l'endroit où les envoyer, il va essayer de se connecter au serveur distant en ssh, vous demander le mot de passe de l'utilisateur, générer une clé sans mot de passe, créer les répertoires qui accueilleront les backups (ce qui permet de vérifier si votre utilisateur a les droits d'écrire dessus), etc. Il va même installer rdiff-backup si ce n'est pas déjà fait. Toute cette automatisation est vraiment extrêmement pratique.
Vous pouvez tester vos sauvegardes via ninjahelper, en sélectionnant le script puis "run". Et voilà, c'est en place ! Il ne vous reste plus qu'à aller siroter une bonne bière l'esprit tranquille, vous avez des backups ! 





