Como faço para migrar um convidado KVM do host para outro?

5

Eu tenho um convidado do KVM que preciso migrar de um host para outro. A migração não precisa ser feita a quente. Seu armazenamento é atualmente suportado por dispositivos de bloco LVM, com um adaptador de rede em ponte. Ambos os servidores têm o mesmo kernel, versão do libvirt, qemu, etc. Qual é a maneira mais fácil de fazer isso?

Meu palpite é:

dd the block devices from server A to server B
export the xml VM definition on A, copy it to B
edit the xml to refer to the new physical device names
create the machine referencing that xml file
    
por Jeff Shattock 01.07.2010 / 02:13

3 respostas

7

Você está certo. Eu fiz isso várias vezes. Eu usei netcat para criar imagens das unidades na rede. Esse é o método que usei:

  1. Crie o volume lógico no destino. Deve ser do mesmo tamanho que o volume de origem.
  2. Execute nc -l 1234 | dd of=/dev/<vgname>/<lvname> no host de destino. Isso diz ao netcat para escutar na porta da rede e canalizar tudo para o volume lógico.
  3. Desligue a máquina de origem de forma limpa para gravar tudo no disco.
  4. Execute dd if=/dev/<vgname>/<lvname> | nc <targetip> 1234 no host de origem. Isso diz a netcat para canalizar tudo pela rede para o host de destino.
  5. Vá buscar uma xícara de café. Isso leva alguns minutos, dependendo do tamanho do volume e da velocidade da rede.
  6. Copie as definições xml de /etc/libvirt/qemu/ da origem para o destino.
  7. Edite a parte storage do arquivo xml e quaisquer outros bits necessários, como o nome da ponte de rede, se forem diferentes.
  8. Recarregue a libvirt no alvo para ler o xml. Um /etc/init.d/libvirt-bin reload deve fazer o truque (ou systemctl restart libvirtd para distribuições que usam systemd)
  9. Inicie a máquina no host de destino.
por 01.07.2010 / 02:57
7

O KVM (desde o qemu 1.3) agora inclui a funcionalidade de migração de armazenamento, portanto, não é mais necessário fazer qualquer um dos hackers mostrados nas respostas mais antigas. Apenas migre a VM como faria normalmente, por exemplo, virsh migrate "Guest Name" qemu+ssh://dest-hypervisor/system ou clique nos botões bonitos da sua GUI escolhida.

    
por 23.02.2013 / 19:48
0

Eu segui uma abordagem um pouco semelhante, com diferenças em detalhes, já que eu precisava canalizar a máquina em uma conexão insegura e usava o virsh:

  1. compartilhe o pubkey entre os dois hosts com ssh-copy id root@newserver de "oldserver"
  2. crie um volume lógico no taget
  3. Fonte de desligamento
  4. Canalize o volume para o host de destino com dd if=/dev/<vgname>/<lvname> | ssh root@targethost 'dd of=/dev/<vgname>/<lvname>'
  5. despeje as definições xml virsh dumpxml <machinename> dump.xml
  6. Transferir arquivo xml scp dump.xml root@targethost:/root/
  7. Edite o arquivo com um editor de sua escolha
  8. Defina a máquina no destino virsh define dump.xml em que a máquina é criada a partir do xml. NÃO use virsh create machine , então a máquina deve ser redefinida após uma reinicialização.
  9. virsh start machinename

Se você não tiver conexão com a Internet com o NAT na nova máquina, verifique se o encaminhamento de IP está ativado.

No Ubuntu nano /etc/sysctl.conf descomente net.ipv4.ip_forward=1

    
por 23.02.2013 / 17:42