VirtualBox 的实时迁移试验

{ 撰文/liangsuilong }

自 VirtualBox 发布 3.1 版本以来,Sun 赋予了 VirtualBox 实时迁移的能力。当然 Sun 没有称自家的实时迁移技术为 Live Migration,而是叫 Teleportation。按照它自家的说法就是 Teleportation 比 Live Migration 更高级。

实现实时迁移的条件之一就是要先把虚拟机存储文件存放在公共的存储空间,因此需要设定一个共享存储 (Shared Storage) 的空间,让实现迁移的两台实体主机都能够连接到共享存储空间上的虚拟媒体文件,包括虚拟磁盘、虚拟光盘和虚拟软盘。否则,即使迁移完成以后,也会因为无法启动迁移后的虚拟机。实时迁移实际上把虚拟机的各个配置文件封装在一个文件,然后透过高速网络,把这个封装文件和内存运行状态从一台实体机迅速传送到另外一台实体机上,期间虚拟机一直保持运行状态。在现有技术条件下,大多虚拟机软件,如 VMware、KVM、Hyper-V、Xen 都需要共享存储。VirtualBox 支持 NFS 和 SMB/CIFS 协议的网络文件系统,也可以支持 iSCSI 连接到 SAN 网络。选用哪一种网络文件系统,则需要根据具体情况而定。SMB/CIFS 在 Windows 和 Linux 都设置简便。NFS 在 Windows 则略显繁复。

Source 机
CPU: Pentium E2160
RAM: 2GB
OS: Fedora 12 x86_64

Target 机
CPU: Athlon 64 X2 4200+
RAM: 2GB
OS: Windows 7 Ultimate x64

Guest 机
Name: XP
CPU: Virtual Single-Core Processor without VT
RAM: 1GB
OS: Windows XP Professional

首先架设一个共享存储环境,我就选用了 SMB/CIFS 协议,在 Source 机架设了 Samba 服务。如果把共享存储服务放置在第三台电脑上会更好,但是我由于条件所限只能把共享存储服务安装在 Source 机上。具体方法就不再详述了。然后移动 Source 机上的虚拟磁盘文件到共享存储服务器上。重新注册到 Source 机上的 VirtualBox,并重新连接到 Guest 机,即可启动 Guest 机。

在 Target 机上新建一个虚拟机。虚拟机的配置和特性要求与 Source 机上的 Guest 机完全一致。随后把共享存储上的虚拟磁盘文件连接到这台虚拟机上。随后在 Target 机运行如下命令:

VBoxManage modifyvm <guest_name> --teleporter on --teleporterport <port> --teleporterpassword <password>

以我的试验为例:

VBoxManage modifyvm XP --teleporter on --teleporterport 1234 --teleporterpassword 123456

若是在 Windows 上使用 VBoxManage 命令行,则需要在命令提示符进入 VirtualBox 的安装目录,用 VBoxManage.exe 替代 VBoxManage,使用效果是一样的。

以上命令瞬间执行完毕,然后启动 Target 机上的 Guest 机。此时 VirtualBox 弹出等待迁移的窗口。若取消迁移,可以按下窗口上的关闭键。

等待迁移

然后在 Source 机运行迁移命令:

VBoxManage controlvm <guest_name> teleport --host <target_name>/<target_ip>/<target_domain_name> --port <port> --password <password>

以我的试验为例:

VBoxManage controlvm XP teleport --host 192.168.1.3 --port 1234 --password 123456

迁移中

Source 机和 Target 机的 VirtualBox 控制台同样出现了正在 Teleporting 的状态:

正在迁移

迁移过程实际上是很短暂的。VirtualBox 把虚拟机的配置文件封装并与虚拟机内存运行状态一并从 Source 机传送到 Target 机即可。按照我家里的网络情况,TP-Link 百兆家用路由器搭建的局域网,大约 20 秒的时间就可以完成迁移过程。VirtualBox 显示的剩余时间实际上是没有意义的。迁移前段 VirtualBox 进行文件校验应该会花费不少时间。实际所需要的时间是根据网络情况与 Source 机和 Target 机的性能配置而定。

当迁移完成以后,Source 机上的 Guest 机自动关闭,而 Target 机上的 Guest 自动启动并且恢复到 Guest 机关闭前的那一刻状态。此时VirtualBox 控制台就会显示 Teleported 状态。

完成迁移

当 Guest 机下一次在 Target 机上启动前,需要把实时迁移的功能关闭,否则就会出现等待迁移的界面。

VBoxManage modifyvm XP --teleporter off

至此,整个实时迁移的试验宣告完成了。此外我更换了 Target 机的 OS,改为与 Source 机一样的 Fedora 12 x86_64,似乎迁移的稳定性会更加好。以上截图大多数取自第二次迁移试验。

注意事项:

  1. 在 VirtualBox 上运用实时迁移功能,Source 机和 Target 机的硬件配置越接近越相似出现错误的机会就会越少。如果 Source 机和 Target 机硬件配置一致,那么出现兼容性的问题就非常地小。特别是两台机器的处理器,尽量要相近的型号。型号差异过大,则非常容易导致出错,尤其是 Guest 机内运行着专门为特定处理器优化的软件。当在两台处理差异过大的机器上进行实时迁移,特别是在跨品牌处理器之间(主要是 AMD 与 Intel) 的迁移,那么建议用户关闭虚拟处理器的筛选器。命令如下 (后面<>为命令选项):

    VBoxManage modifyvm <guest_name> --cpuid <leaf> <eax> <ebx> <ecx> <edx>
    
  2. 实施迁移前,一定要确保 Source 机和 Target 机上的 Guest 机硬件配置和设置都是一样的,特别是 System 和 Display 的选项一定要保持一致,同样也需要采用相同的虚拟网卡。VirtualBox 的实时迁移功能并不需要依赖 VT 技术,但是不能在一台没有 VT 的 Guest 机和一台开启 VT 的 Guest 机之间迁移,否则就会出现错误。

  3. 最好配备有千兆局域网或者更好的网络条件,因为 Guest 机的磁盘操作需要较高的速率,如果仅仅靠百兆局域网,那么速率上的限制和操作上的延时则极大地影响文件操作的效率和适用体验。

总结

VirtualBox 3.1 带来了实时迁移能力,实在让人惊喜。这应该是第一款跨处理器品牌跨平台的虚拟机软件,能够在 Windows、Linux、Mac OS X 和 Solaris 平台上进行实时迁移。良好的易用性,一直都是 VirtualBox 的优点。不过看起来,实时迁移对于 VirtualBox 而言还是刚刚起步,还有很远的路要走。没有为实时迁移这种重量级的特性配备图形化操作界面对 VirtualBox 这款以易用闻名的虚拟机来说,不得不说是一个遗憾。

最后,限于条件,我没有带有 VT 技术的 Intel 处理器。如果哪位热心朋友有这样的条件,可以进行一次带有 VT 的 AMD 与 Intel 的实时迁移试验,将会更有挑战性,因为这种情况下更容易出现处理器兼容性的问题。

{ Thanks liangsuilong. }

Read More:

27 Comments

  1. 1 黑日白月 Commented @ 2010-01-23 21:05Reply to this comment

    支持一个~

    对了,根据 VBox 帮助文档的提示,也可以在本机做迁移实验,方便硬件条件有限制的朋友。

  2. 2 deyu260 Commented @ 2010-01-23 21:32Reply to this comment

    vbox稳定吗 能用在生产环境吗 不能的话我还是玩esx好了

  3. 3 fanhe Commented @ 2010-01-23 22:29Reply to this comment

    vmware player的路过支持

  4. 4 eric Commented @ 2010-01-24 0:44Reply to this comment

    @deyu260: 继续吧,vbox还远远不能被使用在生产环境里。毕竟sun现在也是前途未卜。还是观望一下比较好。

  5. 5 Windbytes Commented @ 2010-01-24 0:57Reply to this comment

    这个不叫实时迁移的,实时迁移的停机时间可以做到1s以内的。用了共享存储都花了20s实在说不过去啊...

  6. 6 黑日白月 Commented @ 2010-01-24 1:59Reply to this comment

    @Windbytes:

    哦?可不可以麻烦介绍下能实现停机 1s 以内的迁移?

  7. 7 liangsuilong Commented @ 2010-01-24 12:03Reply to this comment

    @黑日白月:

    黑兄,我不太明白本机做迁移试验??就是 Source 机和 Target 机为同一台电脑?

    @deyu260:

    VirtualBox 还是有种玩意的意味,对比 ESX 可靠性还是不太够。倒是用它来取代 VMware Workstation 跑跑软件测试之类的,还是可以的。

    @Windbytes:

    要花这么多时间主要是因为局域网速度不够,只是家用级别的 100Mbps,所以就是这么慢了。加上是在 Intel 和 AMD 处理器之间迁移,校验的时间应该会多一点。如果是改用 1000Mbps 的网络,应该会快很多。听说 VMotion 千兆网络下也得要2秒吧。

    几乎所有虚拟机的实时迁移功能都需要共享存储的啊,就算是 VMware 系列的,虽然存储也可以实时迁移,但是必须要和虚拟机的迁移分开完成。当然刚刚新出来的 QEMU-KVM 0.12.2 就已经可以连带磁盘文件的实时迁移。

  8. 8 Hexchain Commented @ 2010-01-24 12:14Reply to this comment

    膜拜Fedora帝 fc12.x86_64 路过

  9. 9 freedrive Commented @ 2010-01-24 13:35Reply to this comment

    如此高级的功能,像我这样的普通用户大概用不着

  10. 10 Windbytes Commented @ 2010-01-24 14:00Reply to this comment

    @黑日白月: 我看的那个是在Xen上实现的,不过原理在全虚拟化上也是适用的。迁移时间和虚拟机内运行的应用有关,它迁移一个Quake 3服务器只用了60ms,web服务器用了不到200ms。具体原理说来话长,你可以看看这篇文章:http://www.usenix.org/events/nsdi05/tech/fullpapers/clark/clarkhtml/

    @liangsuilong: 现在家用的网卡也是千兆的了吧?我看我T400的是啊。我真不知道VMotion也得2s,他广告上说零停机我就以为是那种不到1s的了,呵呵。

    关于网速和存储的问题,现在已经有人在搞广域网上的实时迁移了。网速确实很重要,但也有办法减少对网络带宽的依赖。你可以看看这篇文章: http://portal.acm.org/citation.cfm?id=1254810.1254834 国内大学也有做的: http://portal.acm.org/citation.cfm?id=1551630 我确实对这些商用的vmm不是特别了解,大多都只知道结构,用的也不是太多...

  11. 11 黑日白月 Commented @ 2010-01-25 0:07Reply to this comment

    @liangsuilong:

    VBox 手册 7.2

    “For testing, you can also teleport machines on the same host; in that case, use "localhost" as the hostname on both the source and the target host.”

    @Windbytes:

    那个网址打不开了……

  12. 12 liangsuilong Commented @ 2010-01-25 1:32Reply to this comment

    @Windbytes:

    我粗粗地看了那篇文章(实情是英文不好),它貌似是说的 60ms 是指迁移过程中从 Source 机到 Target 机切换的那一个瞬间是 60ms,也就是说切换的那一个瞬间会有 60ms 的时间虚拟机是不工作的,个人觉得跟 UPS 电源切换时间的意思是类似的。当然这 60ms 已经是很短了。不过实际上迁移的过程中还要迁移内存映像,这可是一个体积不小的东西。

    我那两台电脑也是用千兆的板载网卡,但是路由器是百兆的呢...我偷懒没有拿千兆网线来直接连接两台电脑。

    广域网迁移我觉得最大的问题还是在网速,特别是存储的迁移。按照 Sun 自家的说法,VirtualBox 也能够广域网迁移,--host 选项后面可以跟主机名、IP 和域名,因此只要有公网 IP 和对应的端口就可以迁移了。但是个人认为这样的话,那么 KVM 和 Xen 等其他虚拟机早就实现了广域网迁移了。当然很期待这些研究成果能够尽快应用到实际,特别是数据压缩能够有大的突破。

    PS: 请问您能否把 ACM 的那两篇文章下载然后再分发到网盘呢??我这种人不太够格去注册一个 ACM 帐号...呵呵

    @黑日白月:

    黑白兄,网址应该是这个 http://www.usenix.org/events/nsdi05/tech/full_papers/clark/

  13. 13 liangsuilong Commented @ 2010-01-25 1:54Reply to this comment

    我倒是十分希望 qemu-kvm 的 Block Migration 特性也能够进入 VirtualBox。

    不过我觉得 VirtualBox 的开发者太有个性了..

  14. 14 hmy Commented @ 2010-01-25 8:40Reply to this comment

    xen,vmware 在live migrate 的时候,只拷贝虚拟机的内存, 而且刚开始拷贝的时候,不会停原来的机器.只有当内存拷贝完了,再停原来的机器,然后再同步一下内存(因为拷贝过程中,原来的内存内容可能变了). 同步的时候就是停机的时候. 因此一般的虚拟机停机不会超过1s.

    我测试过xen,虚拟机里面跑浏览器看土豆视频,然后做迁移. 基本感觉不到视频停顿. 我这有视频录像,有机会放上来.

  15. 15 黑日白月 Commented @ 2010-01-25 9:05Reply to this comment

    @liangsuilong:

    感谢指出正确网址~

    "allowing for example an OS running the SPECweb benchmark to migrate across two physical hosts with only 210ms unavailability, or an OS running a Quake 3 server to migrate with just 60ms downtime"

    文中的 210ms 和 60ms 指的是由于迁移导致的服务完全不可用的时间,并不是迁移用时,貌似跟 UPS 的也不太类似。

    文中采取的方式是使用带有页保护的设备将内存逐步复制,同时用速度控制算法保证当前正在运行虚拟机的效率;内存页复制完后,在目标机器上恢复运行状态。试验中未涉及在广域网中的使用,同时也未涉及块设备迁移。

  16. 16 Terry Commented @ 2010-01-25 9:14Reply to this comment

    VMware的实时解决方案的原理是相似的,只是在实现上有些差别。VMware有其自己的cluster file system: VMFS,此外也支持NFS。

    VMware的实时迁移实际上是由VMotion这个组件实现的,把整个虚拟机包括其完整状态封装在几个文件中,存放在SAN/NAS等共享存储中。迁移的过程是把内存和运行状态通过高速网从源复制到目标。根据其文档,说千兆网内小于2秒。

    vSphere client的GUI很强,很少需要用CLI。相比之下Vbox的teleportation还很初级,离企业级应用还差的远。也可能是拿来当实验田,真正的企业级应用应该是Oracle VM才对。

  17. 17 hmy Commented @ 2010-01-25 10:14Reply to this comment

    @terry oracle vm ,你是说那个基于xen的虚拟解决方案?

  18. 18 liangsuilong Commented @ 2010-01-25 12:55Reply to this comment

    @hmy:

    期待你的视频哦....

    @Terry:

    VirtualBox 的实时迁移应该是比较试验的性质,以前有人在官方论坛问过实时迁移的 GUI 前端问题,官方说后续的版本应该加上的。不过对比起 KVM 和 Xen 的那些完善设计相比,VirtualBox 还真是刚刚起步呢。

  19. 19 hmy Commented @ 2010-01-25 13:23Reply to this comment

    http://www.tudou.com/programs/view/ifSjjr3jA_0/ 视频. 画面是用rdesktop 连的,感觉有迟钝.

  20. 20 hmy Commented @ 2010-01-25 13:26Reply to this comment

    @liangsuilong 我有另一个清晰的视频,可惜找不到地方放.

  21. 21 hmy Commented @ 2010-01-25 13:31Reply to this comment

    http://sinaurl.cn/hKCFp 另一个清晰的视频版本,有兴趣的朋友可以下载来看.

  22. 22 Windbytes Commented @ 2010-01-25 16:32Reply to this comment

    @liangsuilong: 那个确实只是停机时间,而不是整个迁移所用的时间。 acm那两篇文章: http://goo.gl/abup

    @hmy: 效果很不错啊,呵呵

  23. 23 liangsuilong Commented @ 2010-01-25 23:45Reply to this comment

    @Windbytes: @hmy:

    感谢两位的视频和文档啊..

  24. 24 Terry Commented @ 2010-01-28 10:19Reply to this comment

    @hmy: 对,就是那个。类似于ESX(i)往裸机上装的东西。

  25. 25 aaaa Commented @ 2010-01-28 11:12Reply to this comment

    rhel的虚拟机hypervisor也不错可以试试,要么就试试vm sphere或者ms hyper-v

  26. 26 liangsuilong Commented @ 2010-01-28 19:11Reply to this comment

    @aaaa:

    RHEL 里面的那个虚拟机就是 KVM 和 Xen 了啊..

  27. 27 Terry Commented @ 2010-01-29 6:33Reply to this comment

    不出所料,VirtualBox被改名为Oracle VM VirtualBox了。