KVM虚拟机创建、管理及迁移技术
(初稿)
********公司
2014年1月20日
KVM虚拟机创建、管理及迁移技术
1 虚拟化技术
虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在70年代的System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine)实例。随着近年来多核系统、集群、网格以及云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,它不仅降低了 IT 成本,而且还增强了系统安全性和可靠性。
虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化通常是指计算元件在虚拟的基础上而不是真实的基础上运行,代表着对计算资源的抽象,是一个为了简化管理、优化资源的解决方案。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程,可以把有限的固定的资源根据用户的不同需求进行重新规划以达到资源的最大利用率。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
1.1 服务器虚拟化
服务器虚拟化就是将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,我们不再受限于物理上的界限,而是让CPU、内存、磁盘、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合,让IT对业务的变化更具适应力。图1中所示为服务器虚拟化及迁移示意图。
图 1 服务器虚拟化及迁移示意图
1.2 虚拟化的分类
虚拟化技术主要分为以下几个大类:
a)平台虚拟化(Platform Virtualization):针对计算机和操作系统的虚拟化;
b)资源虚拟化(Resource Virtualization):针对特定的系统资源的虚拟化,
比如CPU、内存、存储、网络资源等;
c)应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技
术等。
我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为Virtual Machine Monitor或Hypervisor)隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如VMWARE 的ESX 产品),运行虚拟机的真实系统我们称之为主机系统。
1.3 虚拟机迁移
虚拟机迁移技术为服务器虚拟化提供了便捷的方法。目前流行的虚拟化工具如VMware,Xen,HyperV,KVM 都提供了各自的迁移组件。迁移服务器可
以为用户节省管理资金、维护费用和升级费用。以前的x86 服务器,体积比较“庞大”;而现在的服务器,体积已经比以前小了许多,迁移技术使得用户可以用一台服务器来同时替代以前的许多台服务器,这样就节省了用户大量的机房空间。
另外,虚拟机中的服务器有着统一的“虚拟硬件资源”,不像以前的服务器有着许多不同的硬件资源(如主板芯片组不同,网卡不同,硬盘,RAID 卡,显卡不同)。迁移后的服务器,不仅可以在一个统一的界面中进行管理,而且通过某些虚拟机软件,如VMware 提供的高可用性工具,在这些服务器因为各种故障停机时,可以自动切换到网络中另外相同的虚拟服务器中,从而达到不中断业务的目的。总之,虚拟机迁移的优势在于简化系统维护管理、提高系统负载均衡、优化系统电源管理、增强系统错误容忍度以及增强系统抗毁伤能力。
1.3.1 虚拟机迁移性能指标
一个优秀的迁移工具,目标是最小化整体迁移的时间和停机时间,并且将迁移对于被迁移主机上运行服务的性能造成的影响降至最低。当然,这几个因素互相影响,实施者需要根据迁移针对的应用的需求在其中进行衡量,选用合适的迁移工具。虚拟机迁移的性能指标包括以下三个方面:
a)对应用程序的性能影响:迁移对于被迁移主机上运行服务性能的的影响
程度;
b)停机时间:迁移过程中,源主机、目的主机同时不可用的时间;
c)整体迁移时间:从源主机开始迁移到迁移结束的时间。
1.3.2 虚拟机迁移方式
虚拟机迁移有三种方式:P2V(物理机到虚拟机的迁移Physical-to-Virtual),V2V(虚拟机到虚拟机的迁移Virtual-to-Virtual),V2P(虚拟机到物理机的迁移Virtual-to-Physical)。
1.3.
2.1 P2V迁移
P2V 指迁移物理服务器上的操作系统及其上的应用软件和数据到VMM (Virtual Machine Monitor)管理的虚拟服务器中。这种迁移方式,主要是使用
各种工具软件,把物理服务器上的系统状态和数据“镜像”到VMM 提供的虚拟机中,并且在虚拟机中“替换”物理服务器的存储硬件与网卡驱动程序。只要在虚拟服务器中安装好相应的驱动程序并且设置与原来服务器相同的地址(如TCP/IP 地址等),在重启虚拟机服务器后,虚拟服务器即可以替代物理服务器进行工作。P2V迁移方式分为热迁移、半自动迁移和手动迁移三种。
随着 P2V 技术的发展,VMware vCenter Converter 和 Microsoft Hyper-V 已经能够提供热迁移功能,避免宕机。目前,P2V 热迁移仅在 Windows 物理服务器可用,未来将添加对 Linux 的支持。
半自动迁移是指利用专业工具辅助P2V 的迁移,把某些手动环节进行自动化。如利用RedHat 的开源工具virt-p2v,Microsoft Virtual Server Migration Toolkit 等工具将物理机的磁盘数据转换成虚拟机格式。
手动迁移是指用户手动完成所有迁移操作,需要用户对物理机系统和虚拟机环境非常了解。首先,关闭原有的物理机上的服务和操作系统,并且从其他媒质上启动一个新的系统;再把物理机系统的磁盘做成虚拟机镜像文件,如有多个磁盘则需要做多个镜像,并且拷贝镜像到虚拟主机上;最后,为虚拟机创建虚拟设备,加载镜像文件启动虚拟机,调整系统设置,并开启服务。
1.3.
2.2 V2V迁移
V2V 迁移是在虚拟机之间移动操作系统和数据,照顾主机级别的差异和处理不同的虚拟硬件。虚拟机从一个物理机上的VMM 迁移到另一个物理机的VMM,这两个 VMM 的类型可以相同,也可以不同,如 VMware 迁移到 KVM,KVM 迁移到 KVM。可以通过多种方式将虚拟机从一个 VM Host 系统移动到另一个 VM Host 系统。V2V迁移方式分为离线迁移、在线迁移两种。
离线迁移(offline migration)也叫做常规迁移、静态迁移。在迁移之前需要将虚拟机暂停,如果使用共享存储,则只拷贝系统状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行;如果使用本地存储,则需要同时拷贝虚拟机镜像和状态到目的主机。采用这种方式的迁移需要显示地停止虚拟机的运行,从用户角度看,有明确的一段服务不可用的时间,这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。
在线迁移(online migration)也称为实时迁移(live migration),它是指在保证虚拟机上服务正常运行的同时,虚拟机在不同的物理主机之间进行迁移,其逻辑步骤与离线迁移几乎完全一致。不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机运行,当迁移进行到一定阶段,目的主机已经具备了运行系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,服务在目的主机上继续运行。对于服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的,在线迁移适用于对服务可用性要求很高的场景。目前主流的在线迁移工具,如VMware 的VMotion、XEN 的xenMotion、libvirt/virt-manager 图形化工具,都要求物理机之间采用SAN (storage area network), NAS(network-attached storage)之类的集中式共享外存设备,因而在迁移时只需要考虑操作系统内存执行状态的迁移,从而获得较好的迁移性能。
1.3.
2.3 V2P迁移
V2P 指把一个操作系统、应用程序和数据从一个虚拟机中迁移到物理机的主硬盘上,是P2V 的逆操作,它可以同时迁移虚拟机系统到一台或多台物理机上。尽管虚拟化的基本需求是整合物理机到虚拟机中,但这并不是虚拟化的唯一的应用,比如有时虚拟机上的应用程序的问题需要在物理机上验证,以排除虚拟环境带来的影响。先配置好虚拟机,然后运用硬盘克隆工具如赛门铁克的Save & Restore (Ghost)复制数据至工作站硬件,最后在物理机上运行。
1.4 KVM虚拟机迁移工具
虚拟机的迁移技术为服务器的虚拟化提供简便的方法,目前流行的虚拟化产品 VMware,Xen,Hyper-V,KVM 都提供各自的迁移工具。其中 Linux 平台上开源的虚拟化工具KVM 发展迅速,基于KVM 的虚拟机迁移特性也日趋完善。本文全面介绍如何在Ubuntu 12.04 LTS 系统上安装KVM 虚拟机和所需的开源软件,以及虚拟机静态迁移和动态迁移的特性,最后给出了应用libvirt/virt-manager 图形化管理工具进行动态迁移的演示结果。
1.4.1 KVM虚拟机管理工具
KVM(Kernel-based Virtual Machine)是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。准确来说,KVM 仅仅是Linux 内核的一个模块,因此,创建和管理完整的 KVM 虚拟机,需要更多的辅助工具来支撑。
1.4.1.1 QEMU-KVM工具
在Linux系统中,首先我们可以用modprobe系统工具去加载KVM模块,如果用RPM安装KVM软件包,系统会在启动时自动加载模块。只有加载了该模块后,才能进一步通过其他工具创建虚拟机,但仅有KVM 模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。对于KVM的开发者来说,可以选择已经成型的开源虚拟化软件QEMU作为用户空间的工具。QEMU是一个强大的虚拟化软件,它可以虚拟不同的CPU构架,比如说在x86的CPU上虚拟一个Power的CPU,并利用它编译出可运行在Power 上的程序。KVM 使用了QEMU 的基于x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。因此,Linux发行版中分为kernel部分的KVM内核模块和QEMU-KVM工具,这就是KVM 和QEMU 的关系。
1.4.1.2 Libvirt工具
尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,但由于QEMU 工具效率不高且不易于使用,RedHat公司为KVM 开发了更多的辅助工具,比如libvirt、libguestfs 等。libvirt 是一套提供了多种语言接口的API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持KVM,而且支持Xen 等其他虚拟机。使用libvirt,我们只需要通过libvirt 提供的函数连接到KVM 或Xen 宿主机,便可以用同样的命令来控制不同的虚拟机。libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令——virsh(虚拟化的交互式终端),我们可以通过使用 virsh 命令来使用 libvirt 的全部功能。
1.4.1.3 Virt-manager工具
随着虚拟化的引入,物理主机得以摆脱单一实例操作系统的禁锢,用户可以通过多个操作系统用作虚拟机来有效地复用我们的主机。但是,一个主机上的操作系统越密集,就越会增加管理需求。这种管理问题的一个解决方案是Virtual Machine Manager,或称为 virt-manager。
virt-manager由 Red Hat 公司使用 Python 语言开发的虚拟机管理图形界面,用于控制虚拟机的生命周期,包括虚拟机资源配给、网络管理,统计数据收集和报告,以及提供对虚拟机本身的简单图形访问。vvirt-manager 就是利用libvirt 的 API 实现的,它除了提供对虚拟机的管理功能之外,virt-manager 还通过一个嵌入式虚拟网络计算 (VNC) 客户端查看器为Guest 虚拟机提供一个完整图形控制台。
virt-manager作为一个应用程序套件,它包括了一组常见的虚拟化管理工具。这些工具在表1中列出,包括虚拟机构造、克隆、映像制作和查看等功能。
表 1 虚拟化管理应用程序
1.4.1.4 NFS工具
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。应用NFS至少有以下两个主要部分:一台服务器和一台(或者更多)客户机,客户机远程访问存放在服务器上的数据。
1. 5 KVM虚拟机软件安装
安装KVM虚拟机所需软件如下:SSH、NFS、Qemu、libvirt、virt-manager。
首先,在实验室子网的各台
linux计算机的/etc/hosts文件里添加机器名和相应的
IP地址,如图3中所示:
图 3 hosts主机列表可以用# hostname 机器名命令来修改机器名。
1.5.1 安装SSH
SSH为Secure Shell的缩写,是建立在应用层和传输层基础上的安全协议,它是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
在Ubuntu 12.04中安装SSH的命令如下:
# sudo apt-get install ssh
输入以下命令关闭防火墙:
# sudo ufw disabled
1.5.2 安装NFS
NFS的原理是通过网络将远程主机共享的文件系统挂载到本机,Ubuntu 12.04上默认是没有安装NFS服务器的,首先需要安装NFS服务程序:
在Ubuntu 12.04中安装NFS的命令如下:
# sudo apt-get install nfs-kernel-server
安装nfs-kernel-server时,apt会自动安装nfs-common和portmap,这样,宿主机就相当于NFS Server。
打开/etc/exports文件,在末尾加入:
/home/kevin *(rw,sync,no_root_squash)
注:nfs允许挂载的目录及权限在文件/etc/exports中进行定义,各字段含义如下:
/home/kevin:要共享的目录
* :允许所有的网段访问
rw :读写权限
sync:资料同步写入内在和硬盘
no_root_squash:nfs客户端共享目录使用者权限
保存,退出。修改完成之后输入:# exportfs –rv来使配置文件生效。
重启服务:
#sudo /etc/init.d/portmap restart<---重启portmap
图 4 重新启动portmap服务
#sudo /etc/init.d/nfs-kernel-server restart<---重启nfs服务
图 5 重新启动NFS服务
#showmount -e<---显示本机共享目录
图 6 显示本机共享目录
可以在本机上进行挂载测试:
#sudo mount -t nfs localhost:/var/lib/libvirt/images/nfs_share /nfstest91注:localhost为本机linux的IP地址
这样就把共享目录挂载到了/nfstest91目录,取消挂载命令为:
#sudo umount /nfstest91
1.5.3 安装qemu
首先,下载开源虚拟化软件qemu的安装包(qemu-1.7.0.tar.bz2),切换到root管理员权限(#sudo -s):
输入命令:#tar -jxvf qemu-1.7.0.tar.bz2 /home/mnclab,将安装文件解压缩到当前目录。
输入命令:#mv qemu-1.7.0 /usr/local/qemu,将解压缩包移动到文件夹目录/usr/local/qemu下。
安装以下依赖软件,其中uml-utilities、bridge-utils用于给kvm搭建网桥。
#sudo apt-get install libzip-dev libsdl1.2-dev uml-utilities dh-autoreconf bridge-utils cd 进入/usr/local/qemu/qemu-1.7.0目录,输入以下命令完成软件配置:
#./configure --prefix=/usr --localstatedir=/var –sysconfdir=/etc
输入#make 命令完成软件编译,输入#make install 命令完成软件安装。
注意:如果在#configure时提示缺少LIBVIRT_PRIV ATE 0.9.8文件,此时需要安装以下软件包:#sudo apt-get install libyajl-dev,此时继续#configure,则可执行成功。
如果在#make编译时提示在/usr/bin目录下缺少aclocal-1.13、automake-1.13、automake、automake-1.9文件,此时需要安装以下软件包:automake-1.13.3-1.1ubuntu2-all.deb,双击该软件包,系统会自动安装,此时继续#make,则可执行成功。
1.5.4 安装libvirt
首先,下载开源虚拟化软件libvirt的安装包(libvirt-1.1.4.tar.gz),切换到
root管理员权限(#sudo -s):
输入命令:#tar -zxvf libvirt-1.1.4.tar.gz /home/mnclab,将安装文件解压缩到当前目录。
输入命令:#mv libvirt-1.1.4 /usr/local/qemu,将解压缩包移动到文件夹目录/usr/local/libvirt下。
安装以下依赖软件:
#sudo apt-get install libxml2-dev libgnutls-dev libdevmapper-dev python-dev libnl-
dev libpciaccess-dev build-essential
cd 进入/usr/local/libvirt/libvirt-1.1.4目录,输入以下命令完成软件配置:
#./configure --prefix=/usr --localstatedir=/var –sysconfdir=/etc
输入#make 命令完成软件编译,输入#make install 命令完成软件安装。
注意:如果在#configure时提示缺少LIBVIRT_PRIV ATE 0.9.8文件,此时需要安装以下软件包:#sudo apt-get install libyajl-dev,此时继续#configure,则可执行成功。
如果在#make编译时提示在/usr/bin目录下缺少aclocal-1.13、automake-1.13、automake、automake-1.9文件,此时需要安装以下软件包:automake-1.13.3-1.1ubuntu2-all.deb,双击该软件包,系统会自动安装,此时继续#make,则可执行成功。
输入#virsh version命令查看软件是否安装成功,安装成功会显示以下版本:
图 7 软件安装成功版本号
1.5.4.1 配置libvirt
libvirt安装成功后,要想启用libvirt来管理本地和远程计算机,还需要修改一些配置文件。
cd进入/etc/libvirt目录,打开qemu.conf文件修改默认的用户名和组名,(qemu.conf文件默认的用户名和组名是nobody),修改用户名:usrer=mnclab,组名:group=libvirt。
输入以下命令新建libvirt用户组:
#groupadd libvirt
输入以下命令将某一用户加入libvirt用户组:
#gpasswd –a usre libvirt
对于通过#gpasswd –a usre libvirt命令加入到libvirt组的任何用户,必须通过以下命令更新用户组,:
#newgrp libvirt
cd进入/etc/libvirt目录,打开libvirtd.conf文件修改默认的组名、端口号及读写权限配置等,如下所示:
●mdsn_adv=0
●unix_sock_group = "libvirt"
●unix_sock_ro_perms = "0777"
●unix_sock_rw_perms = "0770"
●auth_unix_ro = "none"
●auth_unix_rw = "none
配置完成后,输入以下命令重启libvirt-bin服务:
#sudo service libvirt-bin restart
1.5.4.2 配置polkit
polkit工具包是一个应用程序级定义和处理策略,它是一个集中决策过程对无特权的应用程序授予访问特权操作的框架。
cd进入/var/lib/polkit-1/localauthority/10-vendor.d目录,打开org.libvirt.unix. manage.pkla文件,将其中的内容删除,保留空文件。
cd进入/etc/polkit-1/localauthority/50-local.d目录,输入以下命令新建文件:
#sudo touch 50-org.ubuntu-libvirt-remote.access.pkla,该文件名称可以任意确定,但必须以一个2位数字开头,以.pkla后缀结尾。
打开文件并输入以下内容:
●[libvirt Management Access]
●Identity=unix-group:libvirt
●Action=org.libvirt.unix.manage
●ResultAny=yes
●ResultInactive=yes
●ResultActive=yes
如果存在多个组,则输入以下内容:
●[libvirt Management Access]
●Identity=unix-group:group_name1;unix-group:group_name2;unix-
group:group_name3
●Action=org.libvirt.unix.manage
●ResultAny=yes
●ResultInactive=yes
●ResultActive=yes
cd进入/etc/polkit-1目录,输入以下命令新建文件夹:
#sudo mkdir rules.d
如果允许一个非root用户在libvirt组中来管理虚拟机,需要创建以下文件。
cd进入/etc/polkit-1/rules.d目录,输入以下命令在rules.d文件夹中新建文件:#sudo touch 50-org.libvirt.unix.manage.rules
打开文件并输入以下内容:
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.unix.manage" &&
subject.isInGroup("libvirt")) {
return polkit.Result.YES;
}
});
以上代码表示:如果某个本地或者远程请求的ID为org.libvirt.unix.manage,并且所在的组为libvirt,则赋予polkit权限。
1.5.4.3 配置bridge桥接网络
虚拟机安装完成后,需要为其设置网络接口,以便虚拟机和主机网络、虚拟机之间的网络通信。事实上,如果要在安装虚拟机时使用网络通信,需要提前设置虚拟机的网络连接方式。
KVM 虚拟机网络连接有以下两种方式:
用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的虚拟机访问该虚拟机。
这种网络连接方式称为NAT方式,适用于桌面主机的虚拟化。通过
NAT网络连接方式,不能实现虚拟机和子网中的任何机器能够互相通
信,虚拟机IP与主机IP不在同一子网络中。
虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂,但通过成功设置虚拟网桥,可以让虚拟机与互联网、虚拟机与主机以及虚拟机之间
的通信变得很容易。这种网络连接方式称为Bridge方式,适用于服务
器主机虚拟化。通过Bridge虚拟网桥的网络连接方式,可以实现虚拟
机和子网中的任何机器能够互相通信,使虚拟机成为子网中具有独立
IP地址的主机。
桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机,网桥多用作高级设置,特别是主机多个网络接口的情况。如图8中所示,网桥
Bridge方式适用于服务器主机虚拟化,其配置方式如下: 编辑修改网络设备脚本文件,增加网桥设备
br0
图 9 增加网桥设备端口br0
上述配置新增加了网络设备br0,并将虚拟网卡配置在“192.168.4.*”网段,子网掩码为:255.255.255.0,网关为:192.168.4.253。
编辑修改网络设备脚本文件,修改网卡设备eth0
图 10 修改网卡设备端口eth0
上述配置修改了网卡设备eth0,并指定桥接接口为“br0”,主机网卡硬件地址(MAC地址)为:a4:1f:72:8a:86:fa。
搭建桥接网络成功后重启网络服务
图 11 重启网络服务
重启网络服务后验证桥接接口是否创建成功
图 12 验证桥接接口
从图12中可以看到桥接接口br0已经处于运行状态,桥接的网卡为eth0,虚拟机桥接网络搭建成功。
1.5.5 安装virt-manager
对于 ubuntu,要安装 virt-manager 包可使用以下命令:
#sudo apt-get install virt-manager
apt 命令安装的 virt-manager 应用程序套件使用大约 22MB 的磁盘空间。作为安装的一部分,libvirt 守护程序应在运行。启动libvirt守护进程的命令如下:#sudo libvirtd -d
要进行验证,可使用以下命令:
#ps aux | grep libvirtd
该命令应显示 libvirtd 进程正在运行,结果如下所示:
图 13 查询libvirtd 守护进程
注:命令#sudo libvirtd -d使用 -d 选项是让 libvirtd 以守护程序的形式运行。libvirtd 作为守护程序,它允许从 virt-manager 应用程序连接到虚拟机管理程序并通过它们连接到它们托管的虚拟机。
要确认 virt-manager 包是否已经安装,以及了解 virt-manager 文件的位置,可使用 which 命令:
#which virt-manager
virt-manager 的位置也是套件中其他应用程序 (virt-install, virt-image等)的主目录,安装成功后,就可以使用 virt-manager 创建虚拟机并进行监视。
1.6 KVM虚拟机迁移实验
1.6.1 实验环境介绍
本次实验共由四台计算机组成,主机操作系统均是ubuntu 12.04,本实验中的物理服务器和外部共享存储硬件配置如下表:
表2 硬件配置
1.6.2 KVM虚拟机静态迁移
静态迁移由于允许中断虚拟机的运行,所以相对简单。首先在源主机上关闭虚拟机,然后移动虚拟机的存储镜像和配置文件到目的主机,最后在目的主机上启动虚拟机,恢复服务。
如果源主机和目的主机都能够访问虚拟机的镜像,则只需要迁移虚拟机配置文件。对于ubuntu12.04系统,virt-manager 管理的虚拟机配置文件保存在/etc/libvirt/qemu/”your vm name.xml”中。拷贝XML 配置文件到目的主机的相同目录后,进行适当的修改,比如:与源主机相关的文件或路径等。无论你何时在 /etc/libvirt/qemu/ 中修改了虚拟机的 XML 文件,必须重新运行 define 命令,以激活新的虚拟机配置文件。
#virsh define /etc/libvirt/qemu/”your vm name.xml”
1.6.3 KVM虚拟机动态迁移
动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网络,把虚拟机配置和内存运行状态从一台物理机迅速传送到另外一台物理机上,而在这期间虚拟机一直保持运行状态。在现有技术条件下,大多虚拟机软件如VMware、Hyper-V、Xen 进行动态迁移都需要共享存储的支持。典型的共享存储包括 NFS 和 SMB/CIFS 协议的网络文件系统,或者通过 iSCSI 连接到 SAN 。SAN(Storage Area Network,存储区域网络)是一种高速网络或子网络,提供在计算机与存储系统之间的数据传输。选用哪一种网络文件系统,需要根据具体情况而定,本实验采用了NFS网络文件系统作为源主机和目的主机之间的共享存储。图8中所示为基于共享存储的动态迁移实验网络配置图。
图 14 基于共享存储的动态迁移实验网络配置图
在配置共享存储网络的过程中需要注意以下情况:
a)确保网络连接正确,源主机、目的主机和NFS 服务器之间可以互相访问;
b)确保源主机和目的主机上的 VMM 运行正常;
c)设置 NFS 服务器的共享目录,在/etc/exports文件中进行配置,参照1.5.2
节。
1.6.3.1 创建共享存储池和存储卷
首先在源主机和目的主机上添加共享存储,这里以源主机为例,目的主机做相同的配置。
添加NFS 存储池到源主机和目的主机的vit-manager 中。点击Edit menu->Host Details->Storage tab。
图 15 服务器端NFS存储目录
添加一个新的存储池。点击左下角的“+”号,弹出一个新的窗口。输入以下参数:
●Name:存储池的名字;
●type:选择netfs:Network Exported Directory。因为本实验使用了NFS
作为共享存储协议。