Me pregunto cuál es la forma correcta de mover una VM entre dos hosts KVM sin usar ningún tipo de almacenamiento compartido
¿Sería suficiente copiar los archivos de disco y el volcado XML de la máquina KVM de origen al destino? Si es así, ¿qué comandos deben ejecutarse para importar el vm en el destino?
El sistema operativo es Ubuntu tanto en Dom0 como en DomU.
Gracias por adelantado
kvm-virtualization
ubuntu-12.04
Onitlikesonic
fuente
fuente
/dev/mapper/vgname-lvname
allíComo todavía no puedo comentar, tengo que publicar este apéndice a la respuesta de dyasny de esta manera.
Si la VM tiene instantáneas que desea conservar, debe volcar los archivos xml de instantánea en el origen con
virsh snapshot-dumpxml $dom $name > file.xml
cada instantánea en la lista de instantáneas de la VMvirsh snapshot-list --name $dom
.Luego, en el destino, use
virsh snapshot-create --redefine $dom file.xml
para finalizar la migración de las instantáneas.Si también te importa qué instantánea es la actual, hazlo también en el origen
virsh snapshot-current --name $dom
y en el destino:
virsh snapshot-current $dom $name
Luego, puede usar
virsh snapshot-delete --metadata $dom $name
para cada instantánea para eliminar los archivos xml en la fuente, o simplemente puede eliminarlos de/var/lib/libvirt/qemu/snapshots/$guestname
Fuentes:
lista de correo libvirt-users
http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/
fuente
Sí, simplemente copiar el archivo XML y las imágenes del disco virtual es suficiente, pero esto obviamente impide una migración "en vivo". La VM debe apagarse durante este procedimiento.
Una vez copiado en el destino,
libvirtd
debe volver a cargarse o reiniciarse para reconocer el nuevo archivo XML.fuente
virsh
. Simplemente copiaría los archivos directamente y volvería a cargarlibvirtd
.Instrucciones detalladas sobre cómo copiar máquinas virtuales con blocksync.py
Estas instrucciones se aplican a una VM que utiliza un disco proporcionado por LVM y asume que Python está en cada uno de los hosts
Descargue el script blocksync.py de https://gist.github.com/rcoup/1338263 y coloque el host de origen y de destino en su carpeta / home / user.
Precursor
También necesitará tener acceso 'sudo' a 'root' en ambas máquinas.
Alternativamente, puede hacer todo como root, pero solo si su clave ssh le da acceso root al menos a la máquina de destino. ** En este caso, elimine el nombre de usuario de las líneas de comando.
Configuraciones de ejemplo
Procedimiento
Pasos iniciales en el host de origen
Copie la definición volcada en la nueva máquina (el host "objetivo"), por ejemplo:
puede cambiar la dirección IP interna a su nombre de servidor dom0 de destino ** Nota: es mejor usar la dirección IP para el destino, por ejemplo:Si no puede copiar debido a las claves, el gato larry.xml y cópielo. Luego, puede enviar ssh a otra máquina y crear un archivo y pegarlo.
Encuentre el tamaño y el nombre del disco de la VM usando
.** El comando anterior debe mostrar el tamaño exactamente en bytes. ** El nombre del disco de la máquina está en la primera columna de la lista, su grupo de volúmenes en la segunda y el tamaño en la última. ** Determine el nombre del dispositivo como / dev // ** Verifíquelo con un comando 'll' Por ejemplo, en esta salida: vm_larry vg1 -wi-ao ---- 69793218560B
Pasos iniciales en el host de destino
Cree un archivo de definición de volumen, por ejemplo:
o con las siguientes líneas: NOTA: deberá tomar el tamaño en bytes de la máquina virtual original y colocarlo en el siguiente script. El comando en la máquina fuente para el tamaño era sudo lvs --units BNota: esta definición es para un disco de 69793218560 bytes para VM larry, cambie según sea necesario para la VM real.
Nota: el nombre y la última parte de la ruta deben coincidir y se utilizarán como el nuevo nombre del disco.
Cree el nuevo disco a partir de la definición, utilizando
dirá Vol larry.domainname.com.au creado a partir de larry.domainname.com.au-vol.xml
Haga que el archivo del dispositivo de disco sea accesible:
Edite la definición xml copiada, por ejemplo:
Busque la definición del disco en el archivo (busque "source dev =") y reemplace el dispositivo con el que acaba de crear (puede ls / dev / centos / para ver vm), por ejemplo: / dev / drbd4 -> / dev / centos / larry.domainname.com.au
Este cambio de puente fue exclusivo de nuestra situación.
** Encuentre referencias a "br1" en las estrofas de la interfaz y cámbielo a "br0", por ejemplo, está cambiando el puente de origen para que la línea sea así
Pasos finales en el host de origen
Inicie sesión en el host de origen, p. Ej.
La mejor práctica sería apagar la máquina virtual en el host de origen antes de realizar la sincronización final, pero no es necesario hacerlo. (cierre de virsh NameOfMachine)
Si aún no está en el host de origen, descargue el script blocksync.py de https://gist.github.com/rcoup/1338263
Si su nombre de usuario es user (por ejemplo), copie el script blocksync.py en ambas máquinas en / home / user y chown user: user y chmod 755 el script.
Comando que hace la copia
Nota: el primer nombre del dispositivo es para el host de origen, según lo determinado por el comando 'lvs'; este es de un host fuente [[chewie]].
Nota: esto destruirá el contenido del disco de destino, asegúrese de que /dev/mapper/centos-larry.domainname.com.au sea correcto.
Nota: la sincronización llevará mucho tiempo, aproximadamente 100 segundos por gigabyte, es decir, 90 minutos para un disco de 60 gigabytes.
Sin embargo, puede hacer una sincronización mientras la VM está en uso; las sincronizaciones posteriores pueden ser hasta un 25 por ciento más rápidas
El script imprimirá los parámetros que está utilizando (puede haber un mensaje sobre un módulo en desuso, esto está bien). A continuación, muestra el comando ssh que está utilizando y lo ejecuta (verá el mensaje de personal autorizado solo cuando lo haga). Durante su sincronización, mostrará un total acumulado de bloques copiados y su velocidad promedio. Finalmente, imprime un mensaje de finalización con la cantidad de segundos que tardó.
Cosas que saber
Puede cancelar la sincronización con CTRL C y reiniciarla más tarde ejecutando el comando nuevamente
Pasos finales en el host de destino
Nota: puede ser necesario modificar los detalles de la VM para adaptarlos al nuevo entorno.
fuente
Me he encontrado con este problema con algunos de mis servidores KVM más antiguos, pero es realmente molesto cuando ocurre y puede causar problemas con cualquiera de las máquinas virtuales instaladas. En mi caso, regularmente empujaba una de mis máquinas virtuales al estado de reinicio, ya que el espacio en disco se agotaba lentamente. Las instrucciones a continuación son algo sensibles a la versión KVM / Distro. En mi caso, tengo CentOS 7.5
Por defecto, las imágenes KVM se ubican en la ubicación / var / lib / libvirt / images /
Necesita encontrar el nombre de la máquina virtual, para esto use virsh list
Detenga el VM virsh stop VM-Name
Para mí copio el archivo primero, en lugar de moverlo. Copie el archivo qcow a la nueva ubicación
Edite el archivo VM xml, para hacer referencia a la nueva ubicación del "archivo fuente" virsh edit VM-Name
Querrá cambiar el "archivo fuente" de este archivo
Reinicie el servicio libvirtd.
Luego reinicie la VM y debería estar listo para comenzar.
fuente