3 votes

Détection de la "migration en direct terminée" de KVM

J'utilise KVM (via libvirt en fait) pour un projet de recherche. Nous faisons migrer une machine virtuelle entre différents sous-réseaux, donc après la migration l'adresse IP et les tables de routage doivent être mises à jour, sinon la VM est inaccessible dans son nouveau sous-réseau. Le but est de faire cela aussi vite que possible.

Actuellement, j'utilise ssh sur une adresse IPv6 locale pour me connecter à la VM après la migration en direct. Ensuite, il exécute un script qui attribue la nouvelle adresse IP et la passerelle. Mais cela ajoute beaucoup de surcharge inutile.

Ce que j'aimerais avoir, c'est un moyen pour un démon sur la machine virtuelle de détecter qu'une migration en direct vient de se terminer. Existe-t-il des crochets que je peux utiliser ?

3voto

Chopper3 Points 99341

Si vous faisiez du balisage vlan invité, vous verriez ce changement et pourriez script de cette façon. Alternativement, vous pourriez utiliser un serveur DHCP à port élevé sur les deux / tous les VLAN, avec le même MAC répertorié dans plusieurs scopes, vous pourriez alors simplement déclencher le rafraîchissement sur le changement de vlan.

3voto

Andrew T Points 1088

Si je me souviens bien, à la fin de la migration, la VM devrait envoyer un paquet gratuit pour s'annoncer. Quoi qu'il en soit, jusqu'à ce que les tables arp soient mises à jour, il y aura toujours un peu de décalage, non pas entre la VM et le réseau, mais entre le réseau et la VM.

Ce que vous pouvez faire est d'attraper une VM "arrivante" en interrogeant virsh dominfo Une VM qui migre vers un hôte apparaîtra d'abord comme "en pause", et dès qu'elle est "en marche", vous savez qu'elle a fini de migrer. Sur la cible, vous devriez obtenir un événement de démarrage de domaine avec des détails indiquant qu'il a été migré et sur la source, vous devriez obtenir un événement d'arrêt/migration.

La meilleure solution serait d'utiliser quelque chose comme http://libvirt.org/git/?p=libvirt.git;a=blob;f=examples/domain-events/events-Python/event-test.py sur la cible, vous devriez obtenir un événement de démarrage de domaine avec des détails indiquant qu'il a été migré et sur la source, vous devriez obtenir un événement d'arrêt/migration.

C'est votre meilleure chance d'attraper un événement de migration libvirt en utilisant l'API appropriée.

Il n'est pas possible d'intercepter les migrations à l'intérieur d'une VM, car l'idée même de la migration en direct est que la VM n'en est pas consciente et ne doit pas ressentir la migration.

0voto

BMDan Points 7059

Je pensais que vous verriez quelque chose apparaître dans dmesg pendant une telle migration. Pouvez-vous tester et voir si c'est le cas ? Si c'est le cas, c'est assez facile à déclencher, soit en écrivant un module noyau rapide et sale, soit en prenant la voie expéditive d'écrire un démon Shell-Shell pour regarder dmesg.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X