Serveur de sauvegardes avec Rsnapshot sous CentOS

SauvegardeCet article décrit la mise en place d’un serveur de sauvegardes incrémentales avec Rsnapshot sous CentOS. Rsnapshot est une solution de sauvegarde robuste et efficace écrite en PERL et basée sur Rsync. En combinaison avec SSH, Rsnapshot permet d’effectuer des sauvegardes à distance. Une fois que la première synchronisation des données est effectuée, les sauvegardes se font de manière incrémentale moyennant une série de liens durs (hard links), ce qui évite la duplication inutile.

Rsnapshot tourne sur le serveur de sauvegardes. Les machines dont il faut sauvegarder les données sont totalement passives, il faut juste qu’elles aient un serveur SSH activé.

Prérequis

Le serveur de sauvegardes doit pouvoir se connecter via SSH aux machines distantes. Il faut donc configurer l’authentification par clé SSH au préalable.

Installation

Rsnapshot est fourni par le dépôt EPEL, qu’il faudra donc activer en conséquence.

# yum install rsnapshot

Configuration sur un serveur dédié

Rsnapshot se configure par le biais du fichier /etc/rsnapshot.conf. Le fichier fourni par défaut est amplement commenté et pourra servir de point de départ. La page de manuel rsnapshot(1) fournit la référence complète. Au lieu d’éditer le fichier /etc/rsnapshot.conf, nous allons le renommer et repartir de zéro.

# cd /etc
# mv rsnapshot.conf rsnapshot.conf.orig

Éditer une configuration personnalisée comme ceci, par exemple.

# /etc/rsnapshot.conf

# Version
config_version  1.2

# Emplacement des sauvegardes
snapshot_root   /srv/backup

# Programmes externes
cmd_cp              /usr/bin/cp
cmd_rm              /usr/bin/rm
cmd_rsync           /usr/bin/rsync
cmd_ssh             /usr/bin/ssh
cmd_logger          /usr/bin/logger
cmd_du              /usr/bin/du
cmd_rsnapshot_diff  /usr/bin/rsnapshot-diff

# Fréquence des sauvegardes
retain  hourly  6
retain  daily   7
retain  weekly  4
retain  monthly 3

# Affichage des infos
verbose 2

# Logs
loglevel        3
logfile /var/log/rsnapshot

# Fichier de verrouillage
lockfile        /var/run/rsnapshot.pid

# Fichiers à ne pas sauvegarder
exclude_file    /etc/rsnapshot_exclude.list

# sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/etc            sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/home           sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/var/named      sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/var/www/vhosts sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/usr/local/sbin sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/sqldump        sd-48975.dedibox.fr

Quelques remarques.

  • Il faut impérativement utiliser les tabulations comme séparateurs. Si l’on utilise l’éditeur Vim, l’option :set list permettra d’afficher les tabulations dans le fichier. Si l’on a activé l’option :set expandtab qui remplace les tabulations par une série d’espaces, il faut également la désactiver grâce à :set noexpandtab.
  • L’emplacement des sauvegardes spécifié par la directive snapshot_root sera créé au besoin par Rsnapshot.
  • Les commandes correspondent à un système CentOS 7, et plus généralement à la plupart des distributions Linux.
  • La directive retain hourly 6 correspond à une sauvegarde complète toutes les quatre heures.
  • Le fichier spécifié dans la directive exclude_file contiendra éventuellement les types de fichiers et de répertoires sur lesquels on pourra faire l’impasse.
  • Dans l’exemple ci-dessus, on spécifie les arborescences de données à sauvegarder, plutôt que de choisir l’ensemble du système à la louche pour ensuite exclure les parties du système que l’on ne veut pas sauvegarder.
  • Les bases de données sont récupérées par le biais d’un script sqldump.sh installé sur la machine distante, qui range les sauvegardes SQL soigneusement ficelées dans un répertoire /sqldump. Voir la fin de l’article sur MySQL/MariaDB pour plus de détails.

Tester la configuration

Une fois qu’on a édité la configuration, on peut vérifier si l’on n’a pas fait d’erreurs de syntaxe.

# rsnapshot configtest
Syntax OK

L’option -t permet ensuite de simuler une sauvegarde. Dans ce cas, Rsnapshot nous affiche toutes les opérations qu’il effectuerait, sans réellement les exécuter.

# rsnapshot -t hourly

Synchronisation initiale

Si le serveur distant contient quelques centaines de gigaoctets de données, la première synchronisation peut être assez longue. La bonne politique consiste à effectuer cette première opération à la main, comme ceci.

# rsnapshot hourly

Dans une deuxième console, on peut se faire une idée de la progression du transfert.

# watch du -sh /srv/backup

Au bout de l’opération, on pourra vérifier si tout s’est bien déroulé.

# less /var/log/rsnapshot

[2016-12-22T18:18:11] /usr/bin/rsnapshot hourly: started
[2016-12-22T18:18:11] echo 8430 > /var/run/rsnapshot.pid
[2016-12-22T18:18:11] mkdir -m 0700 -p /srv/backup/
[2016-12-22T18:18:11] mkdir -m 0755 -p /srv/backup/hourly.0/
[2016-12-22T18:18:11] /usr/bin/rsync -a --delete ...
                        ...
[2016-12-22T18:42:49] touch /srv/backup/hourly.0/
[2016-12-22T18:42:50] rm -f /var/run/rsnapshot.pid
[2016-12-22T18:42:50] /usr/bin/rsnapshot hourly: completed

Définition des tâches automatiques

Une fois que la synchronisation initiale s’est correctement déroulée, on peut songer à mettre en place une série de tâches automatiques.

# crontab -l
...
# Rsnapshot
0  */4 * * *  /usr/bin/rsnapshot hourly
45 3   * * *  /usr/bin/rsnapshot daily
30 3   * * 1  /usr/bin/rsnapshot weekly
15 3   1 * *  /usr/bin/rsnapshot monthly

Utilisation au quotidien

Au bout de quinze jours, voilà à quoi ressemble le répertoire des sauvegardes.

# ls -l /srv/backup/
total 60
drwxr-xr-x 3 root root 4096 janv. 20 04:00 daily.0
drwxr-xr-x 3 root root 4096 janv. 19 04:00 daily.1
drwxr-xr-x 3 root root 4096 janv. 18 04:00 daily.2
drwxr-xr-x 3 root root 4096 janv. 17 04:00 daily.3
drwxr-xr-x 3 root root 4096 janv. 16 04:00 daily.4
drwxr-xr-x 3 root root 4096 janv. 15 04:00 daily.5
drwxr-xr-x 3 root root 4096 janv. 14 04:00 daily.6
drwxr-xr-x 3 root root 4096 janv. 21 08:00 hourly.0
drwxr-xr-x 3 root root 4096 janv. 21 04:00 hourly.1
drwxr-xr-x 3 root root 4096 janv. 21 00:00 hourly.2
drwxr-xr-x 3 root root 4096 janv. 20 20:01 hourly.3
drwxr-xr-x 3 root root 4096 janv. 20 16:01 hourly.4
drwxr-xr-x 3 root root 4096 janv. 20 12:01 hourly.5
drwxr-xr-x 3 root root 4096 janv.  8 04:00 weekly.0
drwxr-xr-x 3 root root 4096 janv.  1 04:00 weekly.1

L’option du permet d’afficher un rapport détaillé sur l’espace disque occupé par les sauvegardes.

# rsnapshot du
23G	/srv/backup/hourly.0/
76M	/srv/backup/hourly.1/
298M	/srv/backup/hourly.2/
76M	/srv/backup/hourly.3/
412M	/srv/backup/hourly.4/
553M	/srv/backup/hourly.5/
838M	/srv/backup/daily.0/
964M	/srv/backup/daily.1/
991M	/srv/backup/daily.2/
833M	/srv/backup/daily.3/
829M	/srv/backup/daily.4/
815M	/srv/backup/daily.5/
761M	/srv/backup/daily.6/
50G	/srv/backup/weekly.0/
1,2G	/srv/backup/weekly.1/
82G	total

Configuration pour un réseau local

Dans mon réseau local, la configuration de Rsnapshot est quelque peu différente. J’effectue une seule sauvegarde par jour, et je conserve les données pendant une semaine.

# Fréquence des sauvegardes
retain  daily   7

Voici la définition des sauvegardes distantes.

# alphamule.microlinux.lan
backup  root@alphamule:/etc      alphamule
backup  root@alphamule:/home     alphamule
backup  root@alphamule:/root/sql alphamule

# balthazar.microlinux.lan
backup  root@balthazar:/etc      balthazar
backup  root@balthazar:/home     balthazar

La sauvegarde quotidienne doit être lancée à 13h00.

# crontab -l
# Rsnapshot
00 13 * * * /usr/bin/rsnapshot daily

Téléchargement

Des modèles de fichiers de configuration pour Rsnapshot sont disponibles dans mon dépôt Github, dans le répertoire centos/el7/rsnapshot.

$ git clone https://github.com/kikinovak/centos
Ce contenu a été publié dans CentOS, Documentation Microlinux, avec comme mot(s)-clé(s) , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *