如何将 KVM 客户机从主机迁移到另一个主机?

如何将 KVM 客户机从主机迁移到另一个主机?

我有一个 KVM 客户机,需要将其从一台主机迁移到另一台主机。迁移不需要热完成。其存储目前由 LVM 块设备支持,并带有桥接网络适配器。两台服务器具有相同的内核、libvirt 版本、qemu 等。最简单的方法是什么?

我的猜测是:

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

答案1

你说得对。我已经这样做过好几次了。我用过网猫通过网络对驱动器进行映像处理。这是我使用的方法:

  1. 在目标上创建逻辑卷。其大小应与源卷相同。
  2. nc -l 1234 | dd of=/dev/<vgname>/<lvname>在目标主机上运行。这告诉网猫监听网络端口并将所有内容传输到逻辑卷。
  3. 彻底关闭源机器以将所有内容写入磁盘。
  4. dd if=/dev/<vgname>/<lvname> | nc <targetip> 1234在源主机上运行。这告诉网猫通过网络将所有内容传输到目标主机。
  5. 去喝杯咖啡。这需要几分钟,具体取决于您的卷大小和网络速度。
  6. 将 xml 定义从/etc/libvirt/qemu/源复制到目标。
  7. 编辑贮存xml 文件的部分以及任何其他必要的位,例如网络桥名称(如果它们不同)。
  8. 在目标上重新加载 libvirt 以读取 xml。应该/etc/init.d/libvirt-bin reload可以解决问题(或systemctl restart libvirtd对于使用 systemd 的发行版)
  9. 在目标主机上启动机器。

答案2

KVM(自 qemu 1.3 起)现在包含存储迁移功能,因此不再需要执行旧答案中显示的任何黑客行为。只需像平常一样迁移 VM,例如,virsh migrate "Guest Name" qemu+ssh://dest-hypervisor/system或者单击您选择的 GUI 中的按钮。

答案3

我采用了类似的方法,但在细节上有所不同,因为我需要通过不安全的连接来传输机器,并使用了 virsh:

  1. 在两个主机之间与ssh-copy id root@newserver来自“oldserver”的公钥共享
  2. 在目标上创建逻辑卷
  3. 关机源
  4. 使用管道将卷传输到目标主机dd if=/dev/<vgname>/<lvname> | ssh root@targethost 'dd of=/dev/<vgname>/<lvname>'
  5. 转储 xml 定义virsh dumpxml <machinename> dump.xml
  6. 传输 xml 文件scp dump.xml root@targethost:/root/
  7. 使用您选择的编辑器编辑文件
  8. 在目标上定义机器,virsh define dump.xml然后根据 xml 创建机器。请勿使用virsh create machine,否则必须在重启后重新定义机器。
  9. virsh start machinename

如果新机器上没有带有 NAT 的互联网连接,请确保已启用 IP 转发。

在 Ubuntu 上nano /etc/sysctl.conf取消注释net.ipv4.ip_forward=1

相关内容