Corretto modo per spostare kvm vm

Mi chiedo quale sia il modo corretto di spostare un VM tra due host KVM senza utilizzare alcun tipo di archiviazione condivisa

Sarebbe sufficiente copiare i file del disco e il dump XML dalla macchina KVM di origine a quella destinazione? In caso affermativo, quali comandi devono essere eseguiti per importre la vm sulla destinazione?

  • Aumentare la dimensione del disco dell'ospite Linux in VMware?
  • impostazioni ottimali per win7 64 ospite sul gestore kvm 64 gestito con libvirt
  • Come posso eseguire localmente le immagini Rackspace?
  • Non in grado di installare Gearman su Ubuntu 12.04
  • Scopri che process di apache di utilizzo della CPU è in realtà efficace?
  • Ottenere gli AWStats a funzionare in Ubuntu 12.04
  • Il sistema operativo è Ubuntu sia Dom0 che DomU.

    Grazie in anticipo

    4 Solutions collect form web for “Corretto modo per spostare kvm vm”

    1. copiare i dischi VM da / var / lib / libvirt / images sull'host src allo stesso dir sull'host di destinazione
    2. sull'origine di origine eseguire virsh dumpxml VMNAME > domxml.xml e copiare questo xml nel dest. ospite
    3. sull'host di destinazione eseguire virsh define domxml.xml

    avviare il VM.

    • Se la posizione del disco differisce, è necessario modificare i dispositivi / nodo disco xml per puntare sull'image nell'host di destinazione
    • Se il VM è collegato a reti personalizzate, è necessario modificarli dal xml dell'host di destinazione o ridefinirli ( virsh net-dumpxml > netxml.xml e virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME )

    Dal momento che non posso commentare ancora, devo pubblicare questo addendum alla risposta di Dyasny in questo modo.

    Se il VM dispone di istantanee che si desidera conservare, è necessario disporre i file xml dello snapshot sull'origine con virsh snapshot-dumpxml $dom $name > file.xml per each snapshot nell'elenco snapshot dell'elenco snapshot VM virsh snapshot-list --name $dom .

    Quindi sulla destinazione utilizzare virsh snapshot-create --redefine $dom file.xml per terminare la migrazione degli snapshot.

    Se ti interessa anche di quale istantanea è quella corrente, poi fare altresì sulla fonte:
    virsh snapshot-current --name $dom
    e sulla destinazione:
    virsh snapshot-current $dom $name

    Quindi puoi utilizzare virsh snapshot-delete --metadata $dom $name per each snapshot per eliminare i file xml nella sorgente oppure potresti semplicemente eliminarli da /var/lib/libvirt/qemu/snapshots/$guestname


    fonti:

    1. libvirt-users mailing list

    2. http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/

    Sì, basta copiare il file XML e le immagini del disco virtuale, ma questo ovviamente impedisce una migrazione "viva". La VM deve essere spenta durante questa procedura.

    Una volta copiata alla destinazione, il libvirtd deve essere ricaricato o riavviato per riconoscere il nuovo file XML.

    Istruzioni dettagliate sulla copia di VM usando blocksync.py

    Queste istruzioni si applicano a un VM che utilizza un disco fornito con LVM e assume che Python sia su ciascuno degli host

    Scaricare lo script blocksync.py da https://gist.github.com/rcoup/1338263 e mettere l'host di origine e destinazione nella cartella / home / user.

    Precursore

    • Dovresti avere accesso 'ssh' a entrambe le macchine (fonte e destinazione) per il tuo utente.
    • Avnetworking anche bisogno di avere 'sudo' l'accesso a 'root' su entrambe le macchine.

    • In alternativa, si potrebbe fare tutto come root, ma solo se la chiave ssh ti dà l'accesso principale a alless la macchina di destinazione. ** In questo caso, rimuovere il nome utente dalle righe di command.

    Impostazioni di esempio

    • La macchina virtuale è sull'host dom0 noto come chewie
    • La destinazione desiderata nell'host dom0 noto come darth e aveva un IP interno qui 10.10.10.38 (per il nostro esempio)
    • Nel nostro caso, usiamo centos 7 come sistema operativo dom0 su entrambe le macchine
    • La macchina VIRTUALE in questo caso che si muove si chiama LARRY
    • L'utente che fa l'azione è USER (che sarà il tuo nome)
    • DOM0 significa il server fisico effettivo

    Procedura

    Passaggi iniziali sull'host di origine

    • Accedere all'host dom0 che ha attualmente la macchina (l'host "sorgente"), ad esempio:
        ssh user@chewie.domainname.com.au 
    • Soggiorno come utente, quindi non diventare utente sudo * Elenco macchine con
        sudo virsh --all 
    • Scaricare la definizione macchina usando, ad esempio:
        sudo virsh dumpxml larry> larry.xml 
    • Copiare la definizione di dumping nella nuova macchina (l'host "target"), ad esempio:

        scp -p larry.xml 10.10.10.38:larry.xml 

      è ansible modificare il IP interno al nome del server dom0 di destinazione ** Nota: è meglio utilizzare l'indirizzo IP del target, ad esempio:

        scp -p larry.xml user@10.10.10.38: larry.xml 

      Se non è ansible copiare a causa di chiavi il gatto larry.xml e copiarlo Poi è ansible ssh in un'altra macchina e creare un file e incollarlo.

    • Trovare la dimensione e il nome del disco di VM utilizzando

        sudo lvs --units B 

      .
      ** Il command di cui sopra dovrebbe mostrare la dimensione esattamente in byte. ** Il nome del disco della macchina è nella prima colonna dell'elenco, il suo gruppo di volume nel secondo e la dimensione dell'ultima. ** Determinare il nome del dispositivo come / dev // ** Controllarlo con un command 'll' Ad esempio, in questo output: vm_larry vg1 -wi-ao —- 69793218560B

     LV VG Attr LSize Pool Origine Dati% Meta% Sposta Log Cpy% Sincronizza Converti
       lv_root vg1 -wi-ao ---- 53687091200B
       lv_swap vg1 -wi-ao ---- 17179869184B
       vm_vsrv1 vg1 -wi-ao ---- 193273528320B
       vm_vsrv10 vg1 -wi-ao ---- 64424509440B
       vm_vsrv11 vg1 -wi-ao ---- 161061273600B
       vm_vsrv12 vg1 -wi-ao ---- 204010946560B
       vm_vsrv2 vg1 -wi-ao ---- 140110725120B
       vm_vsrv3 vg1 -wi-ao ---- 128849018880B
       vm_larry vg1 -wi-ao ---- 69793218560B
       vm_vsrv5 vg1 -wi-ao ---- 257698037760B
       vm_vsrv6 vg1 -wi-ao ---- 64424509440B
       vm_vsrv7 vg1 -wi-ao ---- 161061273600B
       vm_vsrv8 vg1 -wi-ao ---- 64424509440B
       vm_vsrv9 vg1 -wi-ao ---- 214748364800B
    

    • Il nome del disco è 'vm_larry', il gruppo di volumi è 'vg1'.
    • Il nome del dispositivo è / dev / vg1 / vm_larry
    • Uscita per esempio:
        ls -l / dev / vg1 / vm_larry 

      è: lrwxrwxrwx. 1 root root 8 gen 31 13:57 / dev / vg1 / vm_larry -> ../dm-11

    Passaggi iniziali sull'host di destinazione

    • Accedere all'host di destinazione, ad es
        ssh user@darth.domainname.com.au 
    • Soggiorno come tuo proprio utente. cioè non diventare radice.
    • Creare un file di definizione del volume, ad esempio:

        vi larry.domainname.com.au-vol.xml 

      o

        nano larry.domainname.com.au-vol.xml 

      con le seguenti righe: NOTA – Dovresti prendere la dimensione in byte dalla VM originale e metterla sotto lo script. Il command sulla macchina di origine per la dimensione è stato sudo lvs –units B

       <volume type='block'> <name>larry.domainname.com.au</name> <capacity unit='bytes'>69793218560</capacity> <allocation unit='bytes'>69793218560</allocation> <target> <path>/dev/centos/larry.domainname.com.au</path> <permissions> <mode>0600</mode> <owner>0</owner> <group>6</group> <label>system_u:object_r:fixed_disk_device_t:s0</label> </permissions> </target> </volume> 

    Nota: questa definizione è per un disco 69793218560 byte per larry VM, cambiare come necessario per il VM effettivo.

    Nota: il nome e l'ultima parte del path devono corrispondere e saranno utilizzati come nuovo nome del disco.

    Crea il nuovo disco dalla definizione, utilizzando

      sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml 

    dirà vol larry.domainname.com.au creato da larry.domainname.com.au-vol.xml

    Rendere accessibile il file del dispositivo di disco rigido:

      sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au 
      sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au 

    Modificare la definizione xml copiata, ad esempio:

      vi larry.xml 

    Trovare la definizione del disco nel file (ricerca per "source dev =") e sostituire il dispositivo con quello appena creato (si può ls / dev / centos / vedere vm), ad esempio: / dev / drbd4 -> / dev / CentOS / larry.domainname.com.au

    Questo cambiamento ponte era unico per la nostra situazione.

    ** Trova tutti i riferimenti a "br1" nelle stanzas dell'interface e lo cambia a "br0" per esempio sta cambiando il sorgente di origine in modo che la row sia come questa

    Passaggi finali sull'host di origine

    • Accedere all'host di origine, ad esempio

        ssh user@chewie.domainname.com.au 

    • La prassi migliore sarebbe quella di arrestare il VM nell'host di origine prima di eseguire la sincronizzazione finale, ma non è necessario farlo. (spegnimento virsh NomeOfMachine)

    • Se non è già nell'host di origine, scarica lo script blockync.py da https://gist.github.com/rcoup/1338263

    • Se il tuo nome utente è l'utente (ad esempio), copia lo script blockync.py in entrambe le macchine in / home / user e chown user: user e chmod 755 lo script.

    • Se non è già nell'host di destinazione, copiatelo, ad esempio:
      scp -p blocksync.py user@10.10.10.38: blocksync.py 
    • Usalo per copiare il disco di origine sul disco di destinazione, ad esempio

    Comando che fa la copia

      sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304 

    Nota: il primo nome di periferica è per l'host di origine, come determinato dal command 'lvs'; questo è da un host [[chewie]].

    Nota: questo distruggerebbe il contenuto del disco di destinazione, assicurarsi che /dev/mapper/centos-larry.domainname.com.au sia corretto!

    Nota: la sincronizzazione richiede molto tempo – circa 100 secondi per gigabyte, vale a dire: 90 minuti per un disco da 60 gigabyte.

    Tuttavia, è ansible eseguire una sincronizzazione mentre il VM è in uso; le sincronizzazioni successive possono essere fino al 25% più veloci

    Lo script stamperà i parametri che utilizza (potrebbe esserci un messaggio su un module deprecato, questo va bene). Successivamente, visualizza il command ssh che sta utilizzando e lo esegue (vedrai il messaggio di personale autorizzato solo quando lo fa). Durante la sincronizzazione, verrà visualizzato un totale di blocchi di copia e la velocità media. Infine, printing un messaggio di completamento con il numero di secondi che ha preso.

    Cose da sapere

    È ansible annullare la sincronizzazione con CTRL C e riavviarlo in seguito eseguendo nuovamente il command

    Passaggi finali sull'host di destinazione

    • Accedere all'host di destinazione, ad es
        ssh user@darth.domainname.com.au 
    • Creare la macchina virtuale, ad esempio:
        virsh definisce larry.xml 
    • Avviare la macchina appena definita, ad esempio:
        sudo virsh start larry 
    • Segnalo per avviare l'avvio host, ad esempio:
        sudo virsh autostart larry 

    Nota: può essere necessario modificare i dettagli della VM in base al nuovo ambiente.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.