KVM 实时或近实时迁移从 LVM 到文件系统后端

KVM 实时或近实时迁移从 LVM 到文件系统后端

我的客户机有 2 个分区(80GB + 1TB)。它们都在 LVM 上。我想将所有磁盘转移到另一台机器,同时尽量减少停机时间。我用 nc 转移了另一台机器。这花了 4 天时间,转移期间我的虚拟机处于关闭状态。

我尝试在传输脏页后制作快照。但据我所知,使用 LVM 是不可能的。我的目标机器没有 LVM 设置和可用的未分区空间。因此,目标机器磁盘上必须是原始文件映像。

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/vg-datastore/lv-vm-1138'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/vg-datastore-sata/lv-vm-1138-2'/>
  <target dev='vdb' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>

源主机:

  • CPU:英特尔(R)至强(R)CPU D-1520 @ 2.20GHz
  • 操作系统:16.04.1 LTS
  • 内核:4.2.0-34-generic
  • qemu-kvm:1:2.3+dfsg-5ubuntu9.2
  • QEMU:2.3.0
  • libvirt: 1.2.16

目标主机:

  • CPU:英特尔(R)至强(R)CPU D-1520 @ 2.20GHz
  • 操作系统:16.04 LTS
  • 内核:4.4.0-28-generic
  • qemu-kvm:1:2.5+dfsg-5ubuntu10.2
  • QEMU:2.5.0
  • libvirt: 1.3.1

答案1

KVM/libvirt 支持 VM 实时迁移和存储迁移(无共享设置),尽管存在一些限制。您的主要问题是存储池的配置不同,因此我不确定libvirt是否可以毫无问题地迁移 VM 映像。

执行实时迁移+存储复制的命令是:

virsh 迁移 --live --copy-storage-all --persistent qemu+ssh://root@/system

此命令假定您与远程主机具有有效的基于 libvirt 的连接。

如果您在迁移虚拟磁盘时遇到问题,您可以尝试通过在目标主机上执行类似于fallocate /dev/vg-datastore/lv-vm-1138 -l 80G和的操作来创建存根目标虚拟磁盘文件/dev/vg-datastore-sata/lv-vm-1138-2 -l 1T

无论如何,由于东道主之间的差异,这可能是一条坎坷的道路。

迁移虚拟机映像的一种更简单的方法是使用增量磁盘复制方法,使用blocksync。 简而言之:

  • 当虚拟机运行时,将虚拟磁盘首次复制到目标主机。此首次复制将要不连贯且不可靠,但可以作为下一个副本的“种子”;
  • 在适当的时候,关闭虚拟机并执行第二份虚拟磁盘。第二个副本将仅传输已更改的块,并且比第一个副本快得多;
  • 完成后,定义虚拟域并在目标主机上启动虚拟机。

请注意,链接的blocksync程序是基于这个原始脚本(顺便说一下,这是这个脚本)我显然认为不承担任何责任对于代码,我强烈建议你彻底测试在生产虚拟机/磁盘文件上使用它之前。与往常一样,您必须在做任何事情之前都要先确认良好的备份。

编辑:正如下面的评论所建议的,另一个用于同步块设备/虚拟映像文件的优秀软件是bdsync。方法基本相同:在虚拟机运行时获取磁盘文件的第一个“种子”副本,然后停止虚拟机并进行另一次最终复制。过去我甚至问过bdsync开发人员类似的问题;浏览此处获取更多信息

相关内容