Table des matières
Xen: Migration de DomU
On va migrer, sans interruption, une machine virtuelle d'un serveur Xen à un autre.
~~READMORE~~
Pré-requis
Pour qu'une migration d'une machine virtuelle Xen (DomU) puisse se réaliser sans interruption de service, il faut remplir les conditions suivantes:
- Même réseau entre les Dom0
- Même processeur (Intel ou AMD)
- Configuration des DomU prêtes ( dans
/etc/xen/…
) - Les disks doivent être partageables !
On va utiliser “iSCSI” pour partager les disks, mais ça peut marcher avec “NFS
” (que je n'ai pas essayé).
Configurer
Dans un premier temps, on va faire simple:
Dans /etc/xen/xend-config.sxp
, faire en sorte d'avoir:
(xend-relocation-server yes) (xend-relocation-hosts-allow '')
C'est fini, on peut redemarrer:
# /etc/init.d/xen restart
Par défaut, le port 8002 est ouvert pour recevoir des requêtes, sans aucune sécurité.
Cas pratique avec un DomU
Donc, on a 2 Dom0 respectant les pré-requis vu plus haut.
Les 2 ont une configuration d'un DomU quasi identique… Pour la démonstration, je le nomme “my-vm
”
Donc, par exemple, dans /etc/xen/my-vm.cfg
:
bootloader = 'pygrub' vcpus = '2' memory = '2048' root = '/dev/xvda2 ro' disk = [ 'iscsimple:lun0@iqn.2014-06.fr.thierry-jaouen:my-vm-disk-sn-00000001,xvda2,w', 'iscsimple:lun1@iqn.2014-06.fr.thierry-jaouen:my-vm-swap-sn-00000001,xvda1,w', ] name = 'my-vm' vif = [ 'ip=192.168.1.7 ,mac=00:16:3E:33:22:11, bridge=brlan' ] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
( Pour importer les disk iSCSI, j'utilise le scripte iscsimple … )
Sur l'un des Dom0, on démarre la machine virtuelle:
# xm create my-vm.cfg
Après quelques secondes, on peut migrer cette machine sur l'autre Dom0:
# xm migrate --live my-vm <IP_DU_DOM0>
Où “<IP_DU_DOM0>
” est l'adresse IP (ou le nom) de l'autre Dom0.
L'opération dure quelques secondes, tout dépendant de la taille de la mémoire vive, de la vitesse du réseau, etc…
Il y a une autre méthode, avec une mise en pause temporaire pendant la migration, il suffit de ne pas ajouter l'option “--live
”.
# xm migrate my-vm <IP_DU_DOM0>
Sécurité
Minimum
Dixit la doc, il n'y a que 2 manières de sécuriser la migration entre Dom0:
- Contrôler l'IP
- Contrôler le nom d'hote
En dehors d'installer un “firewall”, on peut jouer avec les options suivantes:
xend-relocation-hosts-allow | liste en “regex” des hôtes acceptés |
xend-relocation-address | interface réseau utilisée |
Exemple:
(xend-relocation-hosts-allow '^xen-[^.]+\\.local\\.thierry-jaouen\\.fr$') (xend-relocation-address 192.168.1.9)
Toutes IP enregistrés dans le DNS avec le nom “xen-*.local.thierry-jaouen.fr” (où “*” est ce qu'on veut sauf des “.”) seront acceptés, sous réserve qu'elles arrivent a atteindre l'adresse “192.168.1.9” …
Avec SSL
On peut installer SSL, mais c'est juste là pour chiffrer les échanges, et non pas, hélas, pour les authentifier… Et en plus , ça ralenti les migrations
Donc, ça n'a pas grand intérêt.
Pour mémoire:
# aptitude install python-openssl
(Sinon, ça ne marchera pas avec un message comme ça dans les logs: “Error: No module named OpenSSL”)
Exemple: on créé les clés du Dom0 :
# mkdir /etc/xen/ssl # cd /etc/xen/ssl # chmod 0700 . # export NAME=DOM0-relocation # openssl req -out $NAME.csr -new -newkey rsa:2048 -nodes -keyout $NAME.key # openssl x509 -req -in $NAME.csr -signkey $NAME.key -days 3650 -out ./$NAME.crt
On se retrouve avec 3 fichiers:
- DOM0-relocation.key
- DOM0-relocation.csr
- DOM0-relocation.crt
Maintenant on change la conf en:
(xend-relocation-server no) (xend-relocation-ssl yes) (xend-relocation-ssl-server yes) (xend-relocation-server-ssl-key-file /etc/xen/ssl/DOM0-relocation.key) (xend-relocation-server-ssl-cert-file /etc/xen/ssl/DOM0-relocation.crt)
# /etc/init.d/xen restart
Par défaut, le port “8003” est ouvert en attente de requête des autres Dom0… en SSL uniquement.
Voila.