Introduction
En ce moment, je joue avec kvm en essayant de comparer certaines des fonctionnalités de kvm avec vmware.
Un des points forts de vmware est le vmotion ou le déplacement à chaud le contexte d'une machine virtuelle d'une machine physique vers une autre machine physique sans downtime. La même fonctionnalité est également propossé par kvm et ce pour un prix dérisoire (ou nul devrais-je dire), mais demande un paramétrage. Cet article décrit la mise en place des outils nécéssaires à la mise en oeuvre nécéssaire au déplacement d'une machine virtuelle d'une machine physique vers une autre machine physique sans perte de connexion.
Comme pour vmware, pour la mise en oeuvre, il est nécéssaire de disposer un file system clusterisé. Pour cela, nous allons utiliser le module drbd1. Comme son l'indique, ce module permet de synchroniser 2 blocks devices à travers le réseau, permettant ainsi de disposer l'équivalent d'un S.A.N partagé entre 2 machines. Une fois drbd opérationnel, nous configurerons GFS. GFS permet à 2 machines d'accéder en même temps aux mêmes données écriture.
Ces briques configurées rendant notre cluster share nothing opérationnel, il sera possible de tester la migration de machines virtulles sous KVM.
- Les 2 machines physiques n'utiliseront pas de partition physiques, mais des loop devices. La méthode de mise en œuvre en utilisant des partitions LVM ou autres restent identiques.
Création des loops devices
Pour cela, il faut d'abord créer un fichier vide sur la première machine (leia) en utilisant la commande dd. Puis il faudra associer ce fichier à un loop device (après avoir chargé le module si nécessaire) par losetup.
dd if=/dev/zero of=Leia bs=1G count=5 sudo modprobe loop sudo losetup -f Leia
Sur l'autre machine (nemesis), utiliser les mêmes commandes mais en remplçant Leia par Nemesis
Mise en place de drbd
Le module noyau de la version 8 de drbd n'existe pas sous debian sous sa forme binaire, il faut donc utiliser les sources afin de complier le noyau. Cette opération est simple:
- Installer les packages sur les 2 machines.
sudo apt-get install drbd8-source drbd8-utils module-assisstant
- Compiler et charger le module sur les 2 machines par
sudo m-a a-i drbd8-source; modprobe drbd
Adopter la configuration en éditant le fichier de configuration /etc/drbd.conf. Dans ce fichier, il faut modifier, notamment:
ressource: indique le label de la ressource, kvm dans notre cas.
shared-secret: secret partagé permettant l'authentification d'un noeud sur l'autre.
nemesis, lea: nom de chaque noeud et leur ips.
device: nom du device drbd crée sous /dev
become-primary-on both : indique que chaque nœud doit passer primaire lors du démarrage
disk: nom du device correspondant à la partition du disk (normalement c'est /dev/loop0. Il est possible de l'afficher sudo losetup -a)
- Transférer le fichier de configuration sur la 2ème machine.
- Initialiser le device sur les 2 machines:
sudo drbdadm create-md kvm
- Redémarrer les services sur les 2 machines:
sudo invoke-rc.d drbd restart
Vérifier l'état par sudo drbd-overview. Les 2 nœuds doivent être secondaires et leurs données inconsistantes (id est on doit obtenir 0:kvm Connected Secondary/Secondary Inconsistent/Inconsistent C).
Passer une des machines en primaire :
sudo drbdadm -- --overwrite-data-of-peer primary kvm
Attendre la fin de la synchronisation (il est possible de vérifier l'état par sudo watch drbd-overview)
- Passer la 2ème machine en primaire:
sudo drbdadm primary kvm
sudo drbd-overview doit indiquer les 2 machines sont en primaires.
L'installation est terminée. L'étape suivante consiste à mettre en place GFS
- Installer les packages sur les 2 machines.
Gestion de split brain
Il arrive que la connexion entre les 2 nœuds soit coupés. Dans ce cas, il faut d'abord déterminer le nœud contenant les informations sur les informations les récentes.
Sur la machine ayant les données les moins fraîches, passer la commande
sudo drbdadm -- --discard-my-data connect kvm
L'option discard-my-data indique que toutes les modifications apportées sur cette machine seront perdues.
Sur la machine ayant les données les plus fraîches, passer la commande
sudo drbdadm connect kvm
- Les données commenceront à se synchroniser. Vérifier les états de chaque nœud par
cat /proc/drbd
Passer les 2 nœuds en primary par
sudo drbdadm primary kvm
Cette commande doit être passée sur les 2 nœuds.
Distributed Replicated Block Device (1)