Je me demande quelle est la bonne façon de déplacer une machine virtuelle entre deux hôtes KVM sans utiliser aucun type de stockage partagé
Est-il suffisant de copier les fichiers du disque et le cliché XML de la machine KVM source vers la machine cible? Si tel est le cas, quelles commandes doivent être exécutées pour importer la machine virtuelle sur la destination?
Le système d'exploitation est Ubuntu sur les Dom0 et DomU.
Merci d'avance
kvm-virtualization
ubuntu-12.04
Onitlikesonic
la source
la source
/dev/mapper/vgname-lvname
là - basComme je ne peux pas encore commenter, je dois poster cet addendum à la réponse de dyasny de cette façon.
Si la machine virtuelle contient des instantanés que vous souhaitez conserver, vous devez vider les fichiers XML de l'instantané sur la source avec
virsh snapshot-dumpxml $dom $name > file.xml
pour chaque instantané de la liste des instantanés de la machine virtuellevirsh snapshot-list --name $dom
.Ensuite, sur la destination, utilisez
virsh snapshot-create --redefine $dom file.xml
pour terminer la migration des instantanés.Si vous voulez également savoir quel cliché est le cliché actuel, faites de même sur la source:
virsh snapshot-current --name $dom
et sur la destination:
virsh snapshot-current $dom $name
Ensuite, vous pouvez utiliser
virsh snapshot-delete --metadata $dom $name
pour chaque instantané pour supprimer les fichiers XML sur la source, ou vous pouvez simplement les supprimer de/var/lib/libvirt/qemu/snapshots/$guestname
Sources:
Liste de diffusion libvirt-users
http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/
la source
Oui, il suffit de copier le fichier XML et les images de disque virtuel, mais cela empêche évidemment une migration "en direct". La VM doit être éteinte pendant cette procédure.
Une fois copié sur la destination,
libvirtd
il faut recharger ou redémarrer pour reconnaître le nouveau fichier XML.la source
virsh
. Je viens de copier les fichiers directement et rechargerlibvirtd
.Instructions détaillées sur la copie de machines virtuelles à l'aide de blocksync.py
Ces instructions s’appliquent à une machine virtuelle utilisant un disque fourni par LVM et supposent que Python se trouve sur chacun des hôtes.
Téléchargez le script blocksync.py à l' adresse https://gist.github.com/rcoup/1338263 et mettez-le à la fois sur les hôtes source et de destination dans votre dossier / home / user.
Précurseur
Vous aurez également besoin d'un accès «sudo» à «root» sur les deux machines.
Alternativement, vous pouvez tout faire en tant que root, mais uniquement si votre clé ssh vous donne un accès root à au moins la machine cible. ** Dans ce cas, supprimez le nom d'utilisateur des lignes de commande.
Exemple de paramètres
Procédure
Premières étapes sur l'hôte source
Copiez la définition vidée sur la nouvelle machine (l'hôte "cible"), par exemple:
vous pouvez remplacer l'ip interne par le nom de votre serveur dom0 de destination ** Remarque: il est préférable d'utiliser l'adresse ip de la cible, par exemple:Si vous ne pouvez pas copier en raison de clés le chat larry.xml et le copier, vous pouvez alors ssh dans une autre machine, créer un fichier et le coller.
Recherchez la taille et le nom du disque de la machine virtuelle à l'aide de
.** La commande ci-dessus devrait afficher la taille exactement en octets. ** Le nom du disque de la machine est dans la première colonne de la liste, son groupe de volumes dans la seconde et sa taille dans la dernière. ** Déterminez le nom du périphérique sous la forme / dev // ** Vérifiez-le avec une commande 'll' Par exemple, dans cette sortie: vm_larry vg1 -wi-ao ---- 69793218560B
Premières étapes sur l'hôte cible
Créez un fichier de définition de volume, par exemple:
ou avec les lignes suivantes: NOTE - Vous devrez prendre la taille en octets de la machine virtuelle d’origine et la mettre dans le script ci-dessous. La commande sur la machine source pour la taille était sudo lvs --units BRemarque: cette définition concerne un disque 69793218560 octets pour la machine virtuelle larry, modifiez-la si nécessaire pour la machine virtuelle réelle.
Remarque: le nom et la dernière partie du chemin doivent correspondre et seront utilisés comme nouveau nom de disque.
Créez le nouveau disque à partir de la définition, en utilisant
il va dire Vol larry.domainname.com.au créé à partir de larry.domainname.com.au-vol.xml
Rendre le fichier de périphérique de disque accessible:
Editez la définition XML copiée, par exemple:
Recherchez la définition du disque dans le fichier (recherchez "source dev =") et remplacez le périphérique par celui que vous venez de créer (vous pouvez ls / dev / centos / pour voir vm), par exemple: / dev / drbd4 -> / dev / centos / larry.domainname.com.au
Ce changement de pont était unique à notre situation.
** Recherchez les références à "br1" dans les strophes d'interface et remplacez-le par "br0", par exemple, vous modifiez le pont source de façon à ce que la ligne ressemble à ceci
Dernières étapes sur l'hôte source
Connectez-vous à l'hôte source, par exemple
La meilleure pratique consiste à arrêter la machine virtuelle sur l'hôte source avant de procéder à la synchronisation finale, mais cela n'est pas nécessairement le cas. (virsh shutdown NameOfMachine)
Si ce n'est pas déjà fait sur l'hôte source, téléchargez le script blocksync.py à l' adresse https://gist.github.com/rcoup/1338263.
Si votre nom d'utilisateur est utilisateur (par exemple), copiez le script blocksync.py sur les deux machines dans / home / user et chown user: user et chmod 755 le script.
Commande qui fait la copie
Remarque: le premier nom de périphérique correspond à l'hôte source, comme déterminé à partir de la commande 'lvs'; celui-ci provient d'un hôte source [[chewie]].
Remarque: ceci détruira le contenu du disque cible, assurez-vous que /dev/mapper/centos-larry.domainname.com.au est correct!
Remarque: la synchronisation prendra beaucoup de temps - environ 100 secondes par gigaoctet, soit 90 minutes pour un disque de 60 gigaoctets.
Cependant, vous pouvez effectuer une synchronisation lorsque la machine virtuelle est en cours d'utilisation. les synchronisations suivantes peuvent être jusqu'à 25% plus rapides
Le script affichera les paramètres qu’il utilise (un message concernant un module obsolète peut apparaître, c’est acceptable). Ensuite, il affiche la commande ssh qu'il utilise et l'exécute (vous verrez alors le message réservé au personnel autorisé uniquement). Lors de sa synchronisation, il affichera le total cumulé des blocs copiés et sa vitesse moyenne. Enfin, il affiche un message d'achèvement avec le nombre de secondes qu'il a pris.
Choses à savoir
Vous pouvez annuler la synchronisation avec CTRL C et la redémarrer ultérieurement en réexécutant la commande.
Dernières étapes sur l'hôte cible
Remarque: il peut être nécessaire de modifier les détails de la machine virtuelle pour les adapter au nouvel environnement.
la source
J'ai rencontré ce problème avec quelques-uns de mes anciens serveurs KVM, mais c'est vraiment gênant lorsque cela se produit et peut causer des problèmes avec n'importe laquelle des machines virtuelles installées. Dans mon cas, il a régulièrement poussé l'un de mes ordinateurs virtuels dans l'état de réinitialisation, l'espace disque étant épuisé lentement. Les instructions ci-dessous sont quelque peu sensibles à la version de KVM / Distro. Dans mon cas, j'ai CentOS 7.5
Par défaut, les images KVM se trouvent à l’emplacement / var / lib / libvirt / images /.
Vous devez trouver le nom de la machine virtuelle, pour cette utilisation, virsh list
Arrêtez la VM virsh stop VM-Name
Pour moi, je copie d'abord le fichier plutôt que de le déplacer. Copiez le fichier qcow dans le nouvel emplacement
Editez le fichier XML de la VM pour référencer le nouvel emplacement "fichier source" virsh edit VM-Name
Vous voudrez changer le "fichier source" de ce fichier
Redémarrez le service libvirtd
Ensuite, redémarrez la machine virtuelle et vous devriez être prêt à partir.
la source