《kvm虚拟机在物理主机之间迁移的实现》由会员分享,可在线阅读,更多相关《kvm虚拟机在物理主机之间迁移的实现(14页珍藏版)》请在金锄头文库上搜索。
1、V2V 虚拟机迁移的介绍 V2V 虚拟机的迁移是指在 VMM(Virtual Machine Monitor)上运行的虚拟机系统,能够 被转移到其他物理主机上的 VMM 上运行。VMM 对硬件资源进行抽象和隔离,屏蔽了底 层硬件细节。而迁移技术的出现,使得操作系统能在不同的主机之间动态的转移,进一步 解除软,硬件资源之间的相关性。本系列的第一篇文章“虚拟机迁移技术漫谈”中,介绍了 V2V 迁移的三种方式,本文将更加详细的说明三种方式的不同和实现方法。 V2V 迁移方式的分类 静态迁移静态迁移 静态迁移:也叫做常规迁移、离线迁移(Offline Migration) 。就是在虚拟机关机或暂停的
2、情况下从一台物理机迁移到另一台物理机。因为虚拟机的文件系统建立在虚拟机镜像上面, 所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台 物理主机上;如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝 状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要 显式的停止虚拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可 用。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。 共享存储的动态迁移共享存储的动态迁移 动态迁移(Live Migration):也叫在线迁移(Online Migration) 。就
3、是在保证虚拟机上服 务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该 过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况 下,对物理服务器进行离线维修或者升级。与静态迁移不同的是,为了保证迁移过程中虚 拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的 虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源, 经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继 续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断, 因而迁移过程对用
4、户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。 目前主流的动态迁移工具,VMware 的 VMotion,Citrix 的 XenMotion,他们都依赖于物 理机之间采用 SAN(storage area network)或 NAS(network-attached storage)之类的集中 式共享外存设备,因而在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而获得较 好的迁移性能。图图 1. 共享存储的动态迁移示意图共享存储的动态迁移示意图如图 1 中所示的动态迁移,为了缩短迁移时间和服务中断时间,源主机和目的主机共享了 SAN 存储。这样,动态迁移只需要考虑虚拟机系统内
5、存执行状态的迁移,从而获得较好的 性能。 本地存储的动态迁移本地存储的动态迁移 动态迁移基于共享存储设备,为的是加速迁移的过程,尽量减少宕机时间。但是在某些情 况下需要进行基于本地存储的虚拟机的动态迁移,这就需要存储块动态迁移技术,简称块 迁移。 比如某些服务器没有使用 SAN 存储,而且迁移的频率很小,虚拟机上的服务对迁 移时间的要求不严格,则可以使用存储块动态迁移技术;另一方面,SAN 存储的价格 比较高,尽管 SAN 存储能够提高迁移性能和系统的稳定性,对于中小企业仅仅为了 加快迁移速度而配置昂贵的 SAN 存储,性价比不高。 在集中式共享外部存储的环境下,基于共享存储的动态迁移技术无疑
6、能够工作得很 好。但是,考虑到目前一些计算机集群并没有采用共享式外存,而是各自独立拥有本 地外存的物理主机构成。基于共享存储的迁移技术在这种场合下受到限制,虚拟机迁 移到目的主机后,不能访问其原有的外存设备,或者需要源主机为其外存访问提供支 持。 为了拓宽动态迁移技术的应用范围,有必要实现一个包括虚拟机外存迁移在内的全系统动 态迁移方案。使得在采用分散式本地存储的计算机集群环境下,仍然能够利用迁移技术转 移虚拟机环境,并且保证迁移过程中虚拟机系统服务的可用性。图图 2. 本地存储的动态迁移示意图本地存储的动态迁移示意图相比较基于共享存储的动态迁移,数据块动态迁移的需要同时迁移虚拟机磁盘镜像和虚
7、拟 机系统内存状态,延长了迁移时间,在迁移性能上打了折扣。KVM 虚拟机的管理工具 准确来说,KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需 要更多的辅助工具。 QEMU-KVM:在 Linux 系统中,首先我们可以用 modprobe 系统工具去加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。加载 了模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是远远不够的, 因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。关于用户 空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU。
8、QEMU 是一 个强大的虚拟化软件,它可以虚拟不同的 CPU 构架。比如说在 x86 的 CPU 上虚拟 一个 Power 的 CPU,并利用它编译出可运行在 Power 上的程序。KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工 具 QEMU-KVM。所以 Linux 发行版中分为 kernel 部分的 KVM 内核模块和 QEMU-KVM 工具。这就是 KVM 和 QEMU 的关系。 Libvirt、virsh、virt-manager:尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟 机,RedHat 为 KVM 开发了更多的
9、辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易于使用。Libvirt 是一套提供了多种语言接口的 API,为各 种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其 他虚拟机。使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主 机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套 基于文本的管理虚拟机的命令 virsh,你可以通过使用 virsh 命令来使用 libvirt 的 全部功能。但最终用户更渴望的是图形用户界面,这就是 virt
10、-manager。他是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt- manager 就是利用 libvirt 的 API 实现的。 以上这些就是 Linux 系统上 KVM 虚拟化技术的大致架构了。本文正是演示了如何使用 这些工具实现了 KVM 虚拟机的迁移操作。 本文的实验环境介绍 本文中的 KVM 虚拟机软件基于 Novell 公司的 Suse Linux Enterprise Server 11 Service Pack 1 发行版。SLES11 SP1 发布于 2010 年 5 月 19 日,基于 Linux 内核 2.6.32.12
11、,包含了 kvm-0.12.3,libvirt-0.7.6,virt-manager-0.8.4,全面支持 KVM 虚拟机。本文中的 物理服务器和外部共享存储配置如下表:表表 1. 硬件配置硬件配置 物理主机物理主机硬件配置硬件配置Host OSHost NameIP Address 源主机 Source HostXeon(R) E5506 x 4 core MEM: 10GBSLES11 SP1vicorty3192.168.0.73目的主机 Destination HostXeon(R) E5506 x 8 core MEM: 18GBSLES11 SP1victory4192.168.0
12、.74NFS ServerPentium(R) D x 2 core MEM: 2GSLES11 SP1server17192.168.0.17创建 KVM 虚拟机 迁移虚拟机之前,我们需要创建虚拟机。创建虚拟机可以使用 QEMU-KVM 命令或者通 过 virt-manager 图形化管理工具。 QEMU-KVM 创建虚拟机镜像文件:见本文的参考资源“KVM 虚拟机在 IBM System x 上应用”。 virt-manager 创建虚拟机:参考 virt-manager 帮助手册。KVM 虚拟机静态迁移 静态迁移由于允许中断虚拟机的运行,所以相对简单。首先在源主机上关闭虚拟机,然后 移动
13、虚拟机的存储镜像和配置文件到目的主机,最后在目的主机上启动虚拟机,恢复服务。 根据虚拟机镜像存储方式的不同,静态迁移的实现方法稍有不同。 虚拟机之间使用共享存储 如果源主机和目的主机都能够访问虚拟机的镜像,则只需要迁移虚拟机配置文件。比如在 本例中的 SLES11 SP1 系统,virt-manager 管理的虚拟机配置文件在 /etc/libvirt/qemu/” your vm name.xml”。拷贝 XML 配置文件到目的主机的相同目录后,进行适当的修改,比 如:与源主机相关的文件或路径等。无论你何时在 /etc/libvirt/qemu/ 中修改了虚拟机的 XML 文件,必须重新运行
14、 define 命令,以激活新的虚拟机配置文件。清单清单 1. 激活虚拟机配置文件激活虚拟机配置文件# virsh define /etc/libvirt/qemu/”your vm name.xml”虚拟机镜像使用本地存储 本地存储是指虚拟机的文件系统建立在本地硬盘上,可以是文件或者磁盘分区。 本地文件存储:如果虚拟机是基于镜像文件,直接从源主机拷贝镜像文件和 XML 配置文件到目的主机中,然后对 XML 进行适当的修改并激活。 本地磁盘分区:如果虚拟机使用了磁盘分区(物理分区或者逻辑分区)为存储设备,首先用 dump 工具把磁盘分区转换成镜像文件再拷贝到目的主机。在目的主机恢复虚 拟机时,
15、把镜像文件恢复到目的主机的磁盘分区中去。对于虚拟机系统使用了多个磁 盘分区的,需要每个分区单独 dump 成镜像文件。例如使用“/dev/VolGroup00/lv001” LVM 逻辑卷作为存储设备,可以使用下面的命令输出成镜像文件:清单清单 2. 转换逻辑卷为镜像文件转换逻辑卷为镜像文件dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M 保存虚拟机的运行状态 静态迁移虚拟的过程中,虚拟机系统处于关机状态,这样虚拟机关机前的运行状态不会保 留。如果希望保留迁移前的系统状态,并且在迁移后能够恢复,需要对虚拟机做快照备份 或者以休眠的方式关闭系统,详细内
16、容和实现方法将在本系列文章的第五部分介绍。基于共享存储的动态迁移 本文前面“V2V 迁移方式的分类”小节中介绍过,跟据虚拟机连接存储方式的不同,动态迁 移分为基于共享存储的动态迁移和基于本地存储的存储块迁移。本小节实现了目前使用最 广泛的基于共享存储的动态迁移。实现这种实时迁移的条件之一就是把虚拟机存储文件存 放在公共的存储空间。因此需要设定一个共享存储空间,让源主机和目的主机都能够连接 到共享存储空间上的虚拟媒体文件,包括虚拟磁盘、虚拟光盘和虚拟软盘。否则,即使迁 移完成以后,也会因为无法连接虚拟设备,导致无法启动迁移后的虚拟机。 设置实验环境 动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网络,把虚拟机配置 和内存运行状态从一台物理机迅速传送到另外一台物理机上,期间虚拟机一直保持运行状 态。现有技术条件下,大多虚拟机软件如 VMware、Hyper-V、Xen 进行动态迁移都需要 共享存储的支持。典型的共享存储包括 NFS 和 SMB/CIFS 协议的网络文件系统,或者通 过 iSCSI 连接到 SAN 网络。选用哪一