Mise en place de sauvegardes à l'aide de rsnapshot
Tout bon administrateur système le sait, les sauvegardes sont indispensables.
Voici donc un tutorial qui décrit la procédure nécéssaire pour mettre en place une solution de sauvegarde sous FreeBSD basée sur rsnapshot.
Présentation
Rsnapshot est un script écrit en perl.
Il utilise rsync et ssh pour effectuer des sauvegardes à intervalle régulier, soit localement, soit via le réseau, de manière sécurisée.
Il est capable de réaliser des sauvegardes d'un systèmes de fichier ou bien de bases de données par l'intermèdiaires de scripts.
De plus, il utilise les hard link
unix pour :
- Éviter de dupliquer inutilement les fichiers.
- Faciliter la restauration.
Ainsi, rsnapshot crée l'illusion de plusieurs sauvegardes complètes, alors qu'il n'y a sur le système de fichier que la première et les différences éventuelles apparues entre cette dernière et les suivantes.
Installation
Tout d'abord, par acquis de conscience, et pour être certain d'avoir la version la plus récente du logiciel, Il faut utiliser portsnap ou bien utiliser cvsup pour mettre à jour les ports
.
Si vous préférez comme moi la méthode old school
et si votre /etc/make.conf est correctement configuré, vous pouvez utiliser la méthode suivante :
$ cd /usr/ports && make update
Dans le cas contraire, cette commande fera le même travail, à la condition que votre fichier de configuration pour cvsup soit dans /etc/cvsupfile :
$ cvsup -L2 -g /etc/cvsupfile
Une fois la mise à jour des ports
effectué, il faut installer rsnapshot, de la manière la plus traditionnelle qui soit :
$ cd /usr/ports/sysutils/rsnapshot && make install clean
La solution de sauvegarde est maintenant prête à être configurée.
Configuration du serveur de sauvegarde
Commençons par créer un répertoire dans /root pour stocker les différents éléments nécéssaires au fonctionnement de rsnapshot :
$ sudo mkdir -p /root/rsnapshot/scripts
Une fois ce répertoire créé, il faut générer la paire de clefs ssh nécéssaire à la sécurisation de la connexion entre le serveur et les machines à sauvegarder :
$ ssh-keygen -t dsa -b 2048 -f /root/rsnapshot/ssh-key
Il faut ensuite copier dans le répertoire /root/rsnapshot/scripts les deux fichiers joints avec ce billet et les rendre éxécutables :
- L'un,
mysql.rsnapshot.sh, permet de faire la sauvegarde de bases de données mysql. - L'autre,
rsnapreport.php, permet de générer un rapport au format texte à l'issue de la sauvegarde.
Il reste ensuite à éditer /usr/local/etc/rsnapshot.conf pour définir différents paramètres, tel que le répertoire ou seront stockées les sauvegardes et les chemins à suivre pour les effectuer :
ssh_args -o BatchMode=yes -i /root/rsnapshot/ssh-key
backup rsnapshot@machine-a-sauvegarder:/usr/local/www/ machine-a-sauvegarder/usr/local/www/
backup_script /root/rsnapshot/scripts/mysql.rsnapshot.sh machine-a-sauvegarder machine-a-sauvegarder/mysql/
Une fois les modifications nécéssaires effectuées, une vérification s'impose :
$ rsnapshot configtest
Une fois cela effectué, il reste à réaliser la configuration des clients.
Configuration des machines à sauvegarder
Il faut commener par se connecter sur l'un de clients.
Une fois cela fait, il faut ajouter un utilisateur rsnapshot ayant /home/rsnapshot comme répertoire d'accueil et pas de mot de passe :
$ sudo adduser -s /bin/sh -w no -d /home/rsnapshot
Une fois cela effectué, il faut créer le répertoire /home/rsnapshot/.ssh :
$ mkdir /home/rsnapshot/.ssh && chmod 700 /home/rsnapshot/.ssh
Il est alors temps de copier à l'aide de scp la clef publique générée au départ de ce tutorial (et surtout pas la clef privée) :
cd /home/rsnapshot/.ssh && scp mon-serveur-de-backup:/root/rsnapshot/ssh-key.pub ./authorized_keys && chown rsnapshot:rsnapshot ./authorized_keys && chmod 600 ./authorized_keys
Il faut ensuite créer le répertoire scripts dans /home/rsnapshot et y mettre le script rsnapshot-manager.sh ci-joint et le rendre éxécutable par l'utilisateur rsnapshot.
Il reste ensuite à ajouter au début du fichier /home/rsnapshot/authorized_keys le texte suivant, sans oublier l'espace final :
command="/home/rsnapshot/scripts/rsnapshot-manager.sh"
Si ce n'est pas déjà fait, installer sudo :
cd /usr/ports && make update && cd /usr/ports/security/sudo && make install clean
Dans le fichier /usr/local/etc/sudoers, ajouter la ligne suivante à l'aide de l'utilitaire visudo :
rsnapshot ALL=NOPASSWD: /usr/local/bin/rsync
Finalisation
Il faut maintenant se connecter à l'aide de ssh à partir du serveur de sauvegarde sur la machine à sauvegarder pour vérifier que l'authentification fonctionne et l'ajouter aux hôtes reconnus par ssh :
ssh rsnapshot@machine-a-sauvegarder -i /root/rsnapshot/ssh-key
Si tout est correct, ssh va vous poser une question à laquelle il faudra répondre par l'affirmative, et vous verrez ensuite s'afficher un magnifique Rejected, parfaitement normal puisque l'utilisateur rsnapshot sur la machine distante ne peut qu'éxécuter rsync, mysqldump et mysql.
Il ne reste plus qu'à lancer rsnapshot pour vérifier que l'ensemble de la solution est opérationnelle :
$ rsnapshot hourly
Si vous souhaitez avoir un rapport par courrier électronique, il faut ajouter la ligne suivante dans /etc/crontab :
0 */4 * * * root /usr/local/bin/rsnapshot hourly 2>&1 | /root/rsnapshot/scripts/rsnapreport.php | mail
-s"[Rsnapshot report]" monadresse@mondomaine.tld
Il faut également ajouter l'argument --stats à l'option rsync_long_args du fichier de configuration de Rsnapshot.

Commentaires
Bonsoir,
As-tu testé Rdiff-backup (Rsync différentiel) ?
Les deux outils semble avoir un fonctionnement quasi identique.
Cyril
@Cyril :
Non je n'ai pas testé.
Je sais qu'il existe au moins un autre outil, dont je ne connais plus le nom, peut être est celui dont tu parles.
Dans mon souvenir, il fonctionne effectivement sur le même principe que rsnapshot, mais il rajoute en + de la compression.
On gagne alors en espace disque, mais la restauration est plus lente, puisqu'il faut décompresser avant restaurer.
Avec rsnapshot, un simple
cpouscpsuffit pour faire la restauration.Or nous avons des applications critiques, qui doivent pouvoir être restauré le plus rapidement possible, d'ou notre choix.
Dans tous les cas, merci de l'information, je testerai ta solution.