1、KVM 虚拟机迁移技术分析摘 要:随着就计算机的发展,云计算技术已经深入到很多领域,云计算中重要的概念之一就是可伸缩性,而实现它的关键则是虚拟化。虚拟机的迁移技术使得云计算平台中的资源配置更加灵活,尤其是在线迁移技术,提高了虚拟服务器的可用性和可靠性。 关键词:kvm 虚拟机 迁移 1 引言 虚拟机的迁移技术为服务器的虚拟化提供简便的方法,也提高了云计算中的资源利用率。目前流行的虚拟化产品 VMware,Xen,Hyper-V,KVM 都提供各自的迁移工具。其中 Linux 平台上开源的虚拟化工具KVM 发展迅速,基于 KVM 的虚拟机的迁移特性也日趋完善。本文全面介绍KVM 虚拟机在不同的应
2、用环境下的静态迁移和动态迁移。 2.kvm 虚拟机迁移的分类 kvm 虚拟机的迁移是指在 VMM(VirtualMachineMonitor)上运行的虚拟机系统,能够被转移到其他物理主机上的 VMM 上运行。VMM 对硬件资源进行抽象和隔离,屏蔽了底层硬件细节。而迁移技术的出现,使得操作系统能在不同的主机之间动态的转移,进一步解除软、硬件资源之间的相关性。kvm 虚拟机迁移主要分为两大类:静态迁移和动态迁移。 (1)静态迁移 静态迁移也叫做常规迁移、离线迁移(OfflineMigration) 。就是在虚拟机关机或暂停的情况下从一台物理机迁移到另一台物理机。因为虚拟机的文件系统建立在虚拟机镜像
3、上面,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理主机上;如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要显式的停止虚拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。 (2)动态迁移 动态迁移(LiveMigration)也叫在线迁移(OnlineMigration) 。就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用
4、户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。 3.kvm 虚拟机动态迁移的实现方式: 静态迁移由于允许中断虚拟机
5、的运行,所以相对简单,因此下面重点介绍动态迁移的实现方式。根据虚拟机连接存储方式的不同,动态迁移分为基于共享存储的动态迁移和基于本地存储的存储块迁移。 (1)基于共享存储的动态迁移 目前主流的动态迁移工具,VMware 的 VMotion,Citrix 的XenMotion,他们都依赖于物理机之间采用 SAN(storageareanetwork)或 NAS(network-attachedstorage)之类的集中式共享外存设备,因而在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而获得较好的迁移性能。 实现这种实时迁移的条件之一就是把虚拟机存储文件存放在公共的存储空间。因此需要设定一个共
6、享存储空间,让源主机和目的主机都能够连接到共享存储空间上的虚拟媒体文件,包括虚拟磁盘、虚拟光盘和虚拟软盘。否则,即使迁移完成以后,也会因为无法连接虚拟设备,导致无法启动迁移后的虚拟机。 如图 1 中所示的动态迁移,为了缩短迁移时间和服务中断时间,源主机和目的主机共享了 SAN 存储。这样,动态迁移只需要考虑虚拟机系统内存执行状态的迁移,从而获得较好的性能。 (2)基于本地存储的动态迁移 动态迁移基于共享存储设备,为的是加速迁移的过程,尽量减少宕机时间。但是在某些情况下需要进行基于本地存储的虚拟机的动态迁移,这就需要存储块动态迁移技术,简称块迁移。 为了拓宽动态迁移技术的应用范围,有必要实现一个
7、包括虚拟机外存迁移在内的全系统动态迁移方案。使得在采用分散式本地存储的计算机集群环境下,仍然能够利用迁移技术转移虚拟机环境,并且保证迁移过程中虚拟机系统服务的可用性。 相比较基于共享存储的动态迁移,数据块动态迁移的需要同时迁移虚拟机磁盘镜像和虚拟机系统内存状态,延长了迁移时间,在迁移性能上打了折扣。 4.KVM 虚拟机的管理工具 KVM 仅仅是 Linux 内核的一个模块,管理和创建完整的 KVM 虚拟机,需要更多的辅助工具,当然,在使用之前需要在 Linux 系统中安装 KVM软件包并加载 KVM 模块。下面是常用的一些辅助工具。 QEMU-KVM:QEMU 是一个强大的虚拟化软件,它可以虚
8、拟不同的 CPU构架。比如说在 x86 的 CPU 上虚拟一个 Power 的 CPU,并利用它编译出可运行在 Power 上的程序。KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。所以 Linux 发行版中分为 kernel 部分的 KVM 内核模块和 QEMU-KVM 工具。 Libvirt:RedHat 为 KVM 开发了更多的辅助工具,比如libvirt、libguestfs 等。Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen
9、 等其他虚拟机。使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。virt-manager 是图形用户界面,是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用 libvirt 的 API 实现的。 5.小结 虚拟化是未来云计算架构的关键组成模块,而衡量一个“云”能力的关键也正是其虚拟化实施
10、能力。本文对 kvm 虚拟机迁移的分类和实现进行了全面的介绍和分析,尤其是对如何实现虚拟机动态迁移进行了重点讲述。对于系统管理员全面了解迁移方法和策略,进行虚拟机迁移规划有参考意义;而且对于虚拟机的开发和测试人员也有指导意义。 参考文献 1LiuPengcheng,YangZiye,SongXiang,etal.HeterogeneoursLiveMigrationofVirtualMachinesC/Proc.oftheIntlWorkshoponVirtualizationTechnologyBeijing,Chinas.n,2008. 2孙国飞,古建华,胡金华,赵天海。基于预拷贝的虚拟机动态内存迁移机制改进。计算机工程 2011-07 3杨子夜,周逸勋,陈海波,臧斌宇。利用虚拟机动态迁移技术整合虚拟和模拟环境,小 4刘鹏程,陈榕,面向云计算的虚拟机动态迁移框架,计算机工程,2010-03