tuto:sauvegardes:backup_libvirt_vm_avec_backuppc

Ceci est une ancienne révision du document !


Sauvegardes de machines virtuelles

Les machines virtuelles offrent des possibilités inédites de sauvegardes. Il est d'une part possible de les sauvegarder au niveau du système de fichier, comme un vrai serveur (cela permet de conserver un historique fichier par fichier), mais il est aussi possible de les sauvegarder au niveau des périphériques blocs. Cette technique permet une restauration complète, et très rapide. Nous appellerons ce type de sauvegarde une sauvegarde de “bas niveau”. Vous trouverez les instructions pour la mise en place d'une sauvegarde bas niveau avec BackupPC (une sauvegarde au nveau FS se fait comme pour une machine physique, et n'est donc pas abordée ici)

Dans cet exemple, nous utiliserons BackupPC pour la sauvegarde (mais il est possible de le faire avec d'autres outils)

Il n'y a rien à configurer au niveau de la machine virtuelle pour une sauvegarde bas niveau, tout se passe sur la machine hôte.

Télécharger ce script et le placer dans /usr/local/bin, puis lui donner les droits d'exécutions:

wget http://repo.firewall-services.com/misc/virt-backup.pl -O /usr/local/bin/
chmod +x /usr/local/bin/virt-backup.pl

Créer le répertoire de sauvegarde

mkdir -p /var/lib/libvirt/backup
chmod 750 /var/lib/libvirt/backup

Il est recommandé (mais pas obligatoire) de monter un système de fichier indépendant dans ce répertoire. Ce système de fichier doit être le plus rapide possible (RAID0, RAID10).

Vérifier en local que le script fonctionne, en sauvegardant une machine virtuelle

virt-backup.pl --pre --vm=machine_virtuelle --debug

Pour nettoyer les fichiers générés:

virt-backup.pl --post --vm=machine_virtuelle --debug

Pour obtenir une liste d'options disponibles:

virt-backup.pl

Le serveur de sauvegarde doit pouvoir accéder au répertoire de sauvegarde (rsync+ssh est recommandé). L'utilisateur local sur le machine hôte doit avoir les droits d'éxécuter le script virt-backup.pl en tant que root (si il est différent de root):

Cmnd_Alias BACKUPPC /usr/local/bin/virt-backup.pl, /usr/bin/rsync
[...]
backup ALL=(root) NOPASSWD: BACKUPPC

Ensuite, il faut configurer un nouvel hôte à sauvegarder dans BackupPC (peu importe le nom), puis modifier la configuration comme suit:

$Conf{BackupFilesOnly} = {
  '/var/lib/libvirt/backup' => [
    '/cos5*'
  ]
};
$Conf{ClientNameAlias} = 'virt.domain.tld';
$Conf{DumpPostUserCmd} = '$sshPath -l backup $host /usr/bin/sudo /usr/local/bin/virt-backup.pl --post --vm cos5';
$Conf{DumpPreUserCmd} = '$sshPath -l backup $host /usr/bin/sudo /usr/local/bin/virt-backup.pl --pre --compress=pbzip2 --vm cos5 --state';
$Conf{EMailNotifyMinDays} = '1.5';
$Conf{EMailNotifyOldBackupDays} = '2';
$Conf{FullKeepCnt} = [
  '4'
];
$Conf{FullKeepCntMin} = '1';
$Conf{IncrAgeMax} = '7';
$Conf{IncrKeepCnt} = '7';
$Conf{IncrKeepCntMin} = '2';
$Conf{RsyncClientCmd} = '$sshPath -q -x -l backup $host ionice -c2 -n7 nice -n 10 /usr/bin/sudo $rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l backup $host /usr/bin/sudo $rsyncPath $argList+';
$Conf{RsyncShareName} = [
  '/var/lib/libvirt/backup'
];
$Conf{UserCmdCheckStatus} = '1';
$Conf{IncrLevels} = [
  '1'
];
$Conf{CompressLevel} = '0';

Dans cet exemple:

  • virt.domain.tld est la machine hôte
  • backup est l'utilisateur local (sur virt.domain.tld) responsable des sauvegardes
  • cos5 est le nom de la machine virtuelle à sauvegarder
  • le script pre-backup.pl compresse les copies des disques virtuels à la volé, en utilisant pbzip2 (–compress=pbzip2)
  • l'état complet de la machine virtuelle est sauvegarder (dump de la mémoire), permettant de la restaurer dans l'état exacte où elle était au moment de la sauvegarde (!! Attention, provoque parfois des instabilités pour le système invité, à tester avant !!) (–state)
  • Les sorties des commandes pre et post sont vérifié, et la sauvegarde est considérée comme mauvaise si une erreur est détecté ($Conf{UserCmdCheckStatus} = '1')
  • On désactive les sauvegardes incrémentielles multi-niveau ($Conf{IncrLevels} = ['1'])
  • La compression de BackupPC est désactivée (puisque les images des disques sont déjà compressées) ($Conf{CompressLevel} = '0')
  • tuto/sauvegardes/backup_libvirt_vm_avec_backuppc.1255973825.txt.gz
  • Dernière modification: 19/10/2009 19:37
  • de dani