Citrix XenServer 6.5 : Script de sauvegarde automatique
Sommaire
Par défaut, XenServer ne fournit pas d’outil pour exporter ou prendre des snapshots des machines virtuelles de manière automatique. Voici un script « maison » de sauvegarde des machines virtuelles sur un répertoire NFS.
Citrix XenServer est devenu Open Source il y a deux ans. Aujourd’hui dans sa version 6.5, c’est l’occasion pour moi de le mettre en oeuvre. La communauté encore faible à l’heure actuelle va se développer malgré le fait que le support ne soit disponible qu’auprès de Citrix pour les professionnels.
L’interface de XenCenter est assez complète mais il manque encore quelques fonctionnalités, telles que l’automatisation des snapshots et des exports des machines virtuelles.
Fonctionnement du script
Avant toute chose, il faut faire la différence entre un snapshot et un export :
- Snapshot : se fait lorsque la VM est allumée, c’est une capture instantanée et relativement rapide de la VM : disque dur et contenu de la RAM. Un snapshot dépend du précédent snapshot. Voyez cela comme une sauvegarde incrémentielle d’un répertoire. Il est possible à tout moment de revenir à un snapshot précédent avec XenCenter.
- Export : se fait lorsque la VM est éteinte, c’est un fichier XVA qui contient l’intégralité du disque dur de la machine ainsi que ses paramètres de configuration. Un fichier XVA peut être importé au sein de Citrix XenServer depuis l’interface XenCenter. Il est également possible de convertir un fichier XVA afin de l’importer dans d’autres systèmes, tels que Virtualbox.
Afin de ne pas à avoir à éteindre la machine virtuelle avant de l’exporter en XVA, il est possible de convertir un snapshot en template : format exportable en XVA.
Les exports des VM se font sur un répertoire réseau (NFS de préférence) car il ne faut pas stocker les exports directement sur l’hyperviseur. Tout d’abord la raison d’être d’une sauvegarde est d’être déportée. De plus la partition système racine ne fait que 5Go ! Les VM sont stockées sur des volumes logiques LVM. C’est une conception très propre de la part de Citrix au passage ! N’allez pas créer un volume dédié aux exports des VM !
Au final le script fonctionne ainsi :
- Création d’un snapshot
- Conversion du snapshot en template
- Export du snapshot converti : fichier XVA sur un répertoire NFS
- Suppression éventuelle du snapshot
Le choix de la suppression du snapshot vous appartient. Si vous le supprimez, vous ne pourrez pas très rapidement faire revenir la VM à l’état du snapshot. Il faudra importer le fichier XVA.
Si vous ne le supprimez pas, l’espace disque de l’hyperviseur va se réduire au rythme de vos sauvegardes. Sachez que si vous décidez plus tard de supprimer vos snapshots à la main, vous pourrez supprimer un snapshot même si ce n’est pas le dernier de la VM ! En effet, l’hyperviseur est capable de fusionner des snapshots si besoin :
Oui, c’est puissant … !
En pratique
Les outils utilisés
Une connexion SSH au serveur est requise, elle est par défaut activée, le mot de passe du compte root est renseigné lors de l’installation.
Si vous n’avez pas encore monté le répertoire en NFS, c’est par ici. Faites le dans le fichier /etc/fstab afin que le montage soit automatique au démarrage de l’hyperviseur.
La commande xe sera utilisée. Voyez cette commande comme le XenCenter de la ligne de commande :
[root@XENSERVER ~]# xe help Usage: xe <command> [-s server] [-pw passwd] [-p port] [-u user] [-pwf password-file] [command specific arguments] To get help on a specific command: xe help <command> To get a full listing of commands: xe help --all Common command list ------------------- cd-list, diagnostic-vm-status, network-list, snapshot-clone snapshot-copy, snapshot-disk-list, snapshot-export-to-template snapshot-reset-powerstate, snapshot-revert, snapshot-uninstall, sr-list template-export, template-uninstall, vm-cd-add, vm-cd-eject vm-cd-insert, vm-cd-list, vm-cd-remove, vm-checkpoint, vm-clone vm-compute-maximum-memory, vm-copy, vm-disk-add, vm-disk-list vm-disk-remove, vm-export, vm-import, vm-install, vm-list, vm-migrate vm-pause, vm-reboot, vm-reset-powerstate, vm-resume, vm-shutdown vm-snapshot, vm-snapshot-with-quiesce, vm-start, vm-suspend vm-uninstall, vm-unpause, vm-vif-list
Au sein de XenServer, toutes les VM, tous les snapshots et plus globalement tous les objets sont identifiés par un identifiant unique (UUID : Universal Unique Indentifier) du type :
685651bf-ee49-937e-70c9-4a380309c54c
Par exemple, lors de la création d’un snapshot d’une VM avec la commande ci-dessous, l’interpréteur nous retournera un nouvel UUID : celui du snapshot.
[root@XENSERVER ~]# xe vm-snapshot uuid=685651bf-ee49-937e-70c9-4a380309c54c new-name-label="$(date)"
868b7879-96ec-4ee5-890f-339db18adde6
Au final, notre script sera exécuté régulièrement avec les crontab.
Vous pouvez créer un script bash en .sh ou vous rabattre sur un autre langage, tel que python ou PHP. Je vous propose personnellement un script en PHP, exécuté en mode php-cli avec la commande suivante :
php /chemin/vers/le/script.php
Installation de nouveaux paquets
Attention, si vous souhaitez installer de nouveaux paquets sur le serveur, XenServer ne le permet pas par défaut ! Avec une partition système de 5Go, c’est compréhensible !
L’utilitaire yum est par défaut configuré sur les dépôts de Citrix qui sont relativement vides. Afin d’installer un nouveau paquet disponible sur les dépôts officiels de Red Hat, utilisez la commande suivante (exemple avec php-cli) :
[root@XENSERVER ~]# yum --enablerepo=base --disablerepo=citrix install php-cli
Le script
La configuration utilisée pour mon script est la suivante :
- Répertoire NFS monté sur /var/nfs_sauvegarde/
- Script de sauvegarde dans le répertoire /var/nfs_sauvegarde/
- Deux VM
- « serveur1 » : 685651bf-ee49-937e-70c9-4a380309c54c
- « serveur2 » : 1124b0d6-628e-4ff9-a3ce-bded2a21060f
Le script PHP :
<?php // liste des VM // $vms['NOM_VM'] = "UUID_VM"; $vms['serveur1'] = "685651bf-ee49-937e-70c9-4a380309c54c"; $vms['serveur2'] = "1124b0d6-628e-4ff9-a3ce-bded2a21060f"; // répertoire de travail : dossier de sauvegarde NFS chdir('/var/nfs_sauvegarde/'); // pour chaque VM foreach ($vms as $vm => $uuid) { // création snapshot horodaté, récupération de l'UUID du snapshot $name_snapshot = "Save_".$vm."_".date('Y-m-d'); $uuid_snapshot = system("xe vm-snapshot uuid=".$uuid." new-name-label=".$name_snapshot); // conversion du snapshot en VM exportable system("xe template-param-set is-a-template=false ha-always-run=false uuid=".$uuid_snapshot); // export de la VM $name_export = "Export_".$vm."_".date('Y-m-d').".xva"; system("xe vm-export vm=".$uuid_snapshot." filename=".$name_export); // suppression du snapshot system("xe vm-uninstall uuid=".$uuid_snapshot." force=true"); } ?>
Sources
- http://linuxfr.org/news/xenserver-se-libere-et-cree-une-communaute-open-source
- http://jansipke.nl/creating-backups-of-running-vms-in-xenserver/
- http://xmodulo.com/how-to-install-additional-packages-in.html
- http://support.citrix.com/servlet/KbServlet/download/21626-102-714437/XenServer_Understanding_Snapshots.pdf
- Logo XenServer : Service Public Relations, Western Europe, Citrix