为了拓宽动态迁移技术的应用范围,有必要实现一个包括虚拟机外存迁移在内的全系统动态迁移方案。使得在采用分散式本地存储的计算机集群环境下,仍然能够利用迁移技术转移虚拟机环境,并且保证迁移过程中虚拟机系统服务的可用性。
图 2. 本地存储的动态迁移示意图相比较基于共享存储的动态迁移,数据块动态迁移的需要同时迁移虚拟机磁盘镜像和虚拟机系统内存状态,延长了迁移时间,在迁移性能上打了折扣。
KVM 虚拟机的管理工具准确来说,KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具。
以上这些就是 Linux 系统上 KVM 虚拟化技术的大致架构了。本文正是演示了如何使用这些工具实现了 KVM 虚拟机的迁移操作。
本文的实验环境介绍本文中的 KVM 虚拟机软件基于 Novell 公司的 Suse Linux Enterprise Server 11 Service Pack 1 发行版。SLES11 SP1 发布于 2010 年 5 月 19 日,基于 Linux 内核 2.6.32.12,包含了 kvm-0.12.3,libvirt-0.7.6,virt-manager-0.8.4,全面支持 KVM 虚拟机。本文中的物理服务器和外部共享存储配置如下表:
表 1. 硬件配置 物理主机硬件配置Host OSHost NameIP Address源主机
Source Host Xeon(R) E5506 x 4 core
MEM: 10GB SLES11 SP1 vicorty3 192.168.0.73
目的主机
Destination Host Xeon(R) E5506 x 8 core
MEM: 18GB SLES11 SP1 victory4 192.168.0.74
NFS Server Pentium(R) D x 2 core
MEM: 2G SLES11 SP1 server17 192.168.0.17
创建 KVM 虚拟机
迁移虚拟机之前,我们需要创建虚拟机。创建虚拟机可以使用 QEMU-KVM 命令或者通过 virt-manager 图形化管理工具。
QEMU-KVM 创建虚拟机镜像文件:见本文的参考资源“KVM 虚拟机在 IBM System x 上应用”。
virt-manager 创建虚拟机:参考 virt-manager 帮助手册。
KVM 虚拟机静态迁移静态迁移由于允许中断虚拟机的运行,所以相对简单。首先在源主机上关闭虚拟机,然后移动虚拟机的存储镜像和配置文件到目的主机,最后在目的主机上启动虚拟机,恢复服务。根据虚拟机镜像存储方式的不同,静态迁移的实现方法稍有不同。
虚拟机之间使用共享存储如果源主机和目的主机都能够访问虚拟机的镜像,则只需要迁移虚拟机配置文件。比如在本例中的 SLES11 SP1 系统,virt-manager 管理的虚拟机配置文件在 /etc/libvirt/qemu/”your vm name.xml”。拷贝 XML 配置文件到目的主机的相同目录后,进行适当的修改,比如:与源主机相关的文件或路径等。无论你何时在 /etc/libvirt/qemu/ 中修改了虚拟机的 XML 文件,必须重新运行 define 命令,以激活新的虚拟机配置文件。
清单 1. 激活虚拟机配置文件# virsh define /etc/libvirt/qemu/”your vm name.xml”
虚拟机镜像使用本地存储本地存储是指虚拟机的文件系统建立在本地硬盘上,可以是文件或者磁盘分区。
本地文件存储:如果虚拟机是基于镜像文件,直接从源主机拷贝镜像文件和 XML 配置文件到目的主机中,然后对 XML 进行适当的修改并激活。
本地磁盘分区:如果虚拟机使用了磁盘分区(物理分区或者逻辑分区)为存储设备,首先用 dump 工具把磁盘分区转换成镜像文件再拷贝到目的主机。在目的主机恢复虚拟机时,把镜像文件恢复到目的主机的磁盘分区中去。对于虚拟机系统使用了多个磁盘分区的,需要每个分区单独 dump 成镜像文件。例如使用“/dev/VolGroup00/lv001” LVM 逻辑卷作为存储设备,可以使用下面的命令输出成镜像文件:
清单 2. 转换逻辑卷为镜像文件dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M
保存虚拟机的运行状态静态迁移虚拟的过程中,虚拟机系统处于关机状态,这样虚拟机关机前的运行状态不会保留。如果希望保留迁移前的系统状态,并且在迁移后能够恢复,需要对虚拟机做快照备份或者以休眠的方式关闭系统,详细内容和实现方法将在本系列文章的第五部分介绍。
基于共享存储的动态迁移