虚拟化技术的明珠 VMotion实时迁移详解
出处:pconline 2009年06月30日 作者:小蚁 责任编辑:heyaorong
虚拟化正在改变人们对计算机的认识,说起虚拟化,VMotion估计是给人印象深刻的诸多亮点中的一个。VMware公司一直在虚拟化技术中占据领先的地位。因此VMware VMotion就好像站在了VMware这个巨人的肩膀上一样,在实时迁移技术领域,立于高峰之巅。
VMware VMotion概述
VMware VMotion能够在两台正在运行的服务器之间进行实时迁移,具有零停机性能,能够大幅度提高了服务器的可用性,保证交易数据的完整性。VMotion是创建动态,自动优化数据中心的关键因素,对完善服务器虚拟化,存储器虚拟化和网络虚拟化等技术产生重大的影响。
VMware VMotion的迁移示意图
VMware VMotion的功能
对于服务器管理员来说,VMotion允许管理员:1、在资源库中不断地自动分配虚拟机;2、在不中断业务运作的情况下进行各项维修工作,从而令服务器获得最高的可用性。
对于用户来说,VMotion允许用户:1、自动优化和分配资源库,从而大大地提高了硬件的利用率,灵活性和可用性。2、进行定期的硬件设备维护操作,但却不需要预先设定停机时间。3、在服务器发生故障或者表现不佳之前,进行迁移。
VMotion中运用的技术
VMotion从一台物理服务器将虚拟机迁移到另外一台虚拟机要用到下述三项技术:
1. 虚拟机的全部状态信息被压缩在一套存储于共享存储器的文件中。作为载体的存储器类型可以是光纤通道(Fibre Channel),iSCSI存储区域网络(iSCSI Storage Area Network,SAN)或者网络附加存储器(Network Attached Storage,NAS)。VMware的群集虚拟机系统(VMFS)允许多台ESX服务器同时访问同一个虚拟机文件。
2. 虚拟机的动态内存和执行状态在一个高速的网络上进行快速传输,允许虚拟机即时地在源ESX服务器和目标ESX服务器之间进行信息交换。在迁移过程中,VMotion只是在点阵图里对信息交换进行监控,所以整个转移过程对用户来说是透明的。一旦整个内存和系统状态全部复制到目标ESX服务器中,VMotion就会自动终止源虚拟机,同时将点阵图转移到目标ESX服务器中,并在目标ESX服务器中重新启动虚拟机。上述整个操作假如是在一个千兆以太网络中进行,那么不用两秒的时间就可以完成。
3. 虚拟机使用的网络同样也会被目标ESX服务器虚拟化,确保在实时迁移之后,虚拟机的网络身份和连接能够得到保留。VMotion将MAC地址作为进程的一部分来进行管理。一旦目标机被激活,VMotion会检查网络路由器来确保它能识别虚拟机MAC地址新的物理位置。由于虚拟机使用VMotion来进行实时迁移,它的执行状态,网络身份和动态链接都能够得到保护,所以对于用户来说,整个迁移过程并没有引起服务器停机或者网络中断。
VMware VMotion的关键特点
可靠性:自从2004年推出了该产品之后,在成千上万的用户的支持下,VMotion一直不断地为最可靠的实时迁移性能调整标准。
高可用性:最终用户无法觉察到实时迁移所带来的服务器的停机。CPU和网络资源的最大利用确保了实时迁移迅速和有效地进行。
互操作性:无论虚拟机运行在什么操作系统上,实时迁移都可以在任何类型的硬件设备和网络上进行,只要VMware ESX服务器支持该设备和网络。支持由管线通信连接的存储区域网络(SAN)。实行的实时迁移的虚拟机利用带宽高达4GB的光纤通道连接的存储区域网络系统(SAN)。
支持网络附属存储(NAS)和iSCSI的存储区域网络(SAN)。实行实时迁移的虚拟机花费更低的成本,使用更容易管理的存储器。可自定义的CPU兼容性设置。确保虚拟机可以在不同版本的硬件设备上进行迁移,以便虚拟机可以永远处于最新的CPU革新浪潮之中。
易操作:迁移向导。通过迁移向导提供的即时信息,可以为一台虚拟机快速辨别最好的转移对象。
多个并行迁移。在整个IT工作环境中,进行多个并行迁移,来持续不断的优化虚拟机的布局。
优先等级。为每一个实时迁移操作分配一个优先等级,确保当前最需要进行的迁移可以及时反问它们所需要的资源。
安排迁移任务。在每个预定好的时间点上,不需要管理员在场启动,迁移就能够自发进行。
迁移检查追踪。每次迁移都有一份详细的操作报告,包括日期/时间和管理程序初始化迁移的回复信息。
VMotion的具体操作
使用VMotion进行实时迁移允许虚拟机在不中断工作进程的情况下进行。虚拟机的所有状态信息连同它的配置文件都会被迁移到新的主机上。然而与之相连接的虚拟磁盘将会保留在两主机共享的存储器中。在虚拟机的状态信息全部钱一到替换的主机上之后,虚拟机就可以在新的主机上运行了。
需要迁移的状态信息包括当前的内存内容以及所有能够定义和识别该虚拟机的信息。其中,内存信息包括交换数据,操作系统的位数以及存储在内存中的应用程序。而虚拟机的定义和识别信息包括所有映射到虚拟机硬件上的数据,比如BIOS,设备,CPU, 网卡的MAC地址 ,芯片的设置状态等。另外,作为替换的主机还必须满足兼容性要求。
使用VMotion来进行实时迁移一般要经历下述三个步骤:
1. 当VMotion收到实时迁移的请求时,vCenter服务器就会检查当前主机上的虚拟机是否处于稳定的状态。
2. 假如VMotion通过了实时迁移请求,那么虚拟机的所有状态信息(包括内存,注册表和网络连接)就会被复制到目标主机上。
3. 信息复制完毕之后,虚拟机将在新的主机上重新启动,投入运作。
VMware VMotion操作界面
如果在迁移过程中发生了错误,那么虚拟机将会自动恢复到原来的状态和位置。
VMware VMotion错误提示界面
vSphere 4中的VMotion
近日,VMware公布了新一代服务器虚拟化软件,其产品名称由VMware Infrastructure 3改为VMware vSphere 4,这表明了VMware对于服务器虚拟化已经从一个虚拟化的基础平台,走向一个由虚拟化建构起来的资料中心。VMotion在vSphere 4中也得到了很大的改进。最明显的特点就是能够将一台正在运行的虚拟机从一台物理ESX主机上迁移到一台虚拟ESX主机上。
物理ESX主机和虚拟ESX主机之间的迁移
从ESX 3.5升级到vSphere 4的过程中,ESX 3.5的VMotion可以不需要做任何改变就也可适用于vSphere 4。但是,如果使用的是不同的处理器芯片,并且还需要开启以太网虚连接(EVC),那么就需要做一点小变动,而且EVC的连接可能还会有停机的危险。另外,vSphere 4的VMotion却无法兼容ESX 3.5版本的主机。
Storage VMotion
Storage VMotion功能只存在于ESX 3.5和vCenter 2.5以及以上版本。是ESX系列的一个重要的改进。很到人可能会以为Storage VMotion是VMotion中的一项功能,事实上并非如此,两者其实是并行的。VMotion针对的是服务器中虚拟机的迁移,而Storage VMotion针对的是虚拟机中存储信息的迁移,主要是移动虚拟机的个人主目录,配置文件(vmx),日志,交换文件(VSWP),快照,磁盘或者逻辑硬盘(vmdk),操作系统磁盘,数据盘以及所有跟该虚拟机相关的文件。
Storage VMotion操作示意图
Storage VMotion的性能要求
Storage VMotion的性能要求要比VMotion严格得多:
安装带有VMware VMotion 许可证的VMware vCenter;VMware VMotion在ESX服务器上必须被激活并且进行了适当的配置(可以参考VMware管理员基础指南)。
1. 虚拟机不能使用任何VMotion禁用的设备(比如软盘,CD-ROM)。
2. Storage VMotion并不要求一定要连接上物理网络。
ESX服务器必须拥有足够的资源来完成Storage Vmotion的完整操作。
虚拟机的磁盘必须通过快找技术创建一个子磁盘,用来将原有磁盘的数据复制到新的节点上。如果没有这项功能,Storage VMotion将无法正常工作。
ESX服务器必须能够访问员服务器和目标服务器的存储器。
Storage VMotion一次最多可以在同一个数据存储器中同时执行四个迁移操作。
只支持光纤通道和iSCSI存储序列。
虚拟机要求Storage VMotion不能与内部虚拟交换机的网络相连接。
虚拟机要求Storage VMotion不能跟其他虚拟机有群级关系,特别是使用微软群集服务器或者Sun群集器的时候。
在同一台虚拟机上不允许同时使用Storage VMotion和VMotion。一台虚拟机的数据存储中心必须先使用Storage VMotion搬移到目标服务器的存储器中。然后虚拟机才可以使用VMotion迁移到目标ESX服务器上。两者的迁移顺序并没有限制。
Storage VMotion的操作步骤
1. 复制虚拟机的个人主目录到新的节点。这个步骤使用近距离无线通信技术(NFC)复制器来将文件复制的到新的节点上。
虚拟机主目录拷贝
2. 自我迁移(Self-VMotion)到新的虚拟机主目录上。Self-VMotion的进程跟正常的VMotion是一样的。这一步使用新的转换文件,并重新打开其他复制文件,比如虚拟机配置文件以及其他类似的文件。
自我迁移
3. 对磁盘进行快照处理。这一步骤创建了一个子磁盘,用来记录所有虚拟机数据上的变化。
子磁盘的创建
4. 复制虚拟机磁盘到目标服务器。
虚拟机磁盘的拷贝
5. 将步骤四创建的子磁盘整合进拷贝磁盘中。
子磁盘的结合
6. 删除原来虚拟机的主目录和磁盘,并将新的拷贝磁盘的状态设置为可读。
移除源虚拟机
vSphere 4中的Storage VMotion
在vSphere 4中可以使用图形用户界面(GUI)来运行Storage VMotion。整个操作过程因为可视化的操作界面而变得非常简单。Storage VMotion的所有功能都集成在vCenter中,不需要任何外部插件。
Storage VMotion操作界面
在第一个界面中选择修改数据存储(Change datastore)。值得注意的是,选项一是用于虚拟机之间的VMotion,选项三只能在虚拟机的电源被断开之后才可用。
Storage VMotion操作界面
选择合适的数据存储中心来迁移你的信息,并且点击继续。
Storage VMotion操作界面
确认前已成功之后,就选择你所需要的选项。第一个选项是用来保留虚拟机之前的配置。第二个选项是进入thin provisioned模式。点击下一步(next),开始进行Storage VMotion操作。对于管理员来说,这个功能可以大大地简化Storage VMotion的进程。
虚拟机迁移技术漫谈,第 1 部分
如何在虚拟机和物理机以及虚拟机和虚拟机之间的迁移系统
简介: 虚拟机迁移技术为服务器虚拟化提供了便捷的方法。目前流行的虚拟化工具如 VMware,Xen,HyperV,KVM 都提供了各自的迁移组件。尽管商业的虚拟软件功能比较强大,但是开源虚拟机如 Linux 内核虚拟机 KVM 和 XEN 发展迅速,迁移技术日趋完善。本系列文章介绍了虚拟机迁移的三种方式 P2V、V2V 和 V2P,及他们在内核虚拟机 KVM 上的实现方法,分成五个部分。本文是第一部分,全面介绍了虚拟机迁移的各种方法和相应的迁移工具 , 并且着重分析了 Linux 平台上开源的虚拟化工具 KVM 和 XEN 实时迁移中的的内存预拷贝技术。
本文的标签: 虚拟技术
系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行。在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术。在源主机上实时备份操作系统和应用程序的状态,然后把存储介质连接到目标主机上,最后在目标主机上恢复系统。随着虚拟机技术的发展,系统的迁移更加灵活和多样化。
本系列文章全面介绍了虚拟机迁移的三种方式 P2V、V2V 和 V2P,及他们在内核虚拟机 KVM 上的实现方法,分成五个部分。第一部分,介绍虚拟机迁移的各种方法和相应的迁移工具,并且着重分析 Linux 平台上开源的虚拟化工具 KVM 和 XEN 实时迁移中的的内存预拷贝技术;
第二部分介绍 KVM 虚拟机之间的 V2V 迁移技术,包括离线迁移和在线迁移;第三部分介绍基于 VMware 或 XEN 的虚拟机如何迁移到基于 KVM 的虚拟机;第四部分介绍物理机到虚拟机迁移 P2V 和虚拟机到物理机迁移 V2P 在 KVM 虚拟机上的实现;第五部分介绍和虚拟机迁移密切相关的虚拟机克隆、快照和备份技术。
迁移服务器可以为用户节省管理资金、维护费用和升级费用。以前的 x86 服务器,体积比较“庞大”;而现在的服务器,体积已经比以前小了许多,迁移技术使得用户可以用一台服务器来同时替代以前的许多台服务器,这样就节省了用户大量的机房空间。另外,虚拟机中的服务器有着统一的“虚拟硬件资源”,不像以前的服务器有着许多不同的硬件资源(如主板芯片组不同,网卡不同,硬盘,RAID 卡,显卡不同)。迁移后的服务器,不仅可以在一个统一的界面中进行管理,而且通过某些虚拟机软件,如 VMware 提供的高可用性工具,在这些服务器因为各种故障停机时,可以自动切换到网络中另外相同的虚拟服务器中,从而达到不中断业务的目的。总之,迁移的优势在于简化系统维护管理, 提高系统负载均衡,增强系统错误容忍度和优化系统电源管理。
一个优秀的迁移工具,目标是最小化整体迁移的时间和停机时间,并且将迁移对于被迁移主机上运行服务的性能造成的影响降至最低。当然,这几个因素互相影响,实施者需要根据迁移针对的应用的需求在其中进行衡量,选用合适的工具软件。虚拟机迁移的性能指标包括以下三个方面:
- 整体迁移时间:从源主机开始迁移到迁移结束的时间
- 停机时间:迁移过程中,源主机、目的主机同时不可用的时间
- 对应用程序的性能影响:迁移对于被迁移主机上运行服务性能的的影响程度。
物理机到虚拟机的迁移(Physical-to-Virtual)
P2V 指迁移物理服务器上的操作系统及其上的应用软件和数据到 VMM(Virtual Machine Monitor)管理的虚拟服务器中。这种迁移方式,主要是使用各种工具软件,把物理服务器上的系统状态和数据“镜像”到 VMM 提供的虚拟机中,并且在虚拟机中“替换”物理服务器的存储硬件与网卡驱动程序。只要在虚拟服务器中安装好相应的驱动程序并且设置与原来服务器相同的地址(如 TCP/IP 地址等),在重启虚拟机服务器后,虚拟服务器即可以替代物理服务器进行工作。
P2V 迁移方法
- 手动迁移:手动完成所有迁移操作,需要对物理机系统和虚拟机环境非常了解。
-
-
- 关闭原有的物理机上的服务和操作系统,并且从其他媒质上启动一个新的系统。比如从 LiveCD 上启动一个新的光盘系统。大部分的发行版都会带有 LiveCD。
- 把物理机系统的磁盘做成虚拟机镜像文件,如有多个磁盘则需要做多个镜像,并且拷贝镜像到虚拟主机上。
- 为虚拟机创建虚拟设备,加载镜像文件
- 启动虚拟机,调整系统设置,并开启服务。
-
- 半自动迁移:利用专业工具辅助 P2V 的迁移,把某些手动环节进行自动化。比如将物理机的磁盘数据转换成虚拟机格式,这一向是相当耗时的工作,你可以选择专业的工具来完成这个步骤。这里有大量的工具可以使用,如 RedHat 的开源工具 virt-p2v,Microsoft Virtual Server Migration Toolkit 等。
- P2V 热迁移:迁移中避免宕机 。大部分 P2V 工具也有一个很大的限制:在整个迁移过程中,物理机不可用。在运行关键任务的环境或有 SLA(服务水平协议)的地方,这种工具不可选。幸运的是随着 P2V 技术的发展,VMware vCenter Converter 和 Microsoft Hyper-V 已经能够提供热迁移功能,避免宕机。目前,P2V 热迁移仅在 Windows 物理服务器可用,未来将添加对 Linux 的支持。
虚拟机到虚拟机的迁移(Virtual-to-Virtual)
V2V 迁移是在虚拟机之间移动操作系统和数据,照顾主机级别的差异和处理不同的虚拟硬件。虚拟机从一个物理机上的 VMM 迁移到另一个物理机的 VMM,这两个 VMM 的类型可以相同,也可以不同。如 VMware 迁移到 KVM, KVM 迁移到 KVM。可以通过多种方式将虚拟机从一个 VM Host 系统移动到另一个 VM Host 系统。
V2V 离线迁移
离线迁移(offline migration):也叫做常规迁移、静态迁移。在迁移之前将虚拟机暂停,如果共享存储,则只拷贝系统状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。如果使用本地存储,则需要同时拷贝虚拟机镜像和状态到目的主机。到这种方式的迁移过程需要显示的停止虚拟机的运行。从用户角度看,有明确的一段服务不可用的时间。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。
V2V 在线迁移
在线迁移(online migration):又称为实时迁移 (live migration)。是指在保证虚拟机上服务正常运行的同时,虚拟机在不同的物理主机之间进行迁移,其逻辑步骤与离线迁移几乎完全一致。不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机运行,当迁移进行到一定阶段,目的主机已经具备了运行系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,服务在目的主机上继续运行。对于服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。在线迁移适用于对服务可用性要求很高的场景。
目前主流的在线迁移工具,如 VMware 的 VMotion,XEN 的 xenMotion,都要求物理机之间采用 SAN(storage area network), NAS(network-attached storage)之类的集中式共享外存设备,因而在迁移时只需要考虑操作系统内存执行状态的迁移,从而获得较好的迁移性能。
另外,在某些没有使用共享存储的场合,可以使用存储块在线迁移技术来实现 V2V 的虚拟机在线迁移。相比较基于共享存储的在线迁移,数据块在线迁移的需要同时迁移虚拟机磁盘镜像和系统内存状态,迁移性能上打了折扣。但是他使得在采用分散式本地存储的环境下,仍然能够利用迁移技术转移计算机环境,并且保证迁移过程中操作系统服务的可用性,扩展了虚拟机在线迁移的应用范围。V2V 在线迁移技术消除了软硬件相关性,是进行软硬件系统升级,维护等管理操作的有力工具。
V2V 内存迁移技术
对于 VM 的内存状态的迁移,XEN 和 KVM 都采用了主流的的预拷贝(pre-copy)的策略。迁移开始之后,源主机 VM 仍在运行,目的主机 VM 尚未启动。迁移通过一个循环,将源主机 VM 的内存数据发送至目的主机 VM。循环第一轮发送所有内存页数据,接下来的每一轮循环发送上一轮预拷贝过程中被 VM 写过的脏页内存 dirty pages。直到时机成熟,预拷贝循环结束,进入停机拷贝阶段,源主机被挂起,不再有内存更新。最后一轮循环中的脏页被传输至目的主机 VM。预拷贝机制极大的减少了停机拷贝阶段需要传输的内存数据量,从而将停机时间大大缩小。
然而,对于更新速度非常快的内存部分,每次循环过程都会变脏,需要重复 pre-copy,同时也导致循环次数非常多,迁移的时间变长。针对这种情况,KVM 虚拟机建立了三个原则:集中原则,一个循环内的 dirty pages 小于等于 50;不扩散原则, 一个循环内传输的 dirty pages 少于新产生的;有限循环原则,循环次数必须少于 30。在实现上,就是采取了以下措施:
- 有限循环:循环次数和效果受到控制,对每轮 pre-copy 的效果进行计算,若 pre-copy 对于减少不一致内存数量的效果不显著,或者循环次数超过了上限,循环将中止,进入停机拷贝阶段。
- 在被迁移 VM 的内核设置一个内存访问的监控模块。在内存 pre-copy 过程中,VM 的一个进程在一个被调度运行的期间,被限制最多执行 40 次内存写操作。这个措施直接限制了 pre-copy 过程中内存变脏的速度,其代价是对 VM 上的进程运行进行了一定的限制。
KVM 的预拷贝在线迁移过程详解:
- 系统验证目标服务器的存储器和网络设置是否正确,并预保留目标服务器虚拟机的资源。
图 1. 源服务器和目标服务器简图
- 当虚拟机还在源服务器上运转时,第一个循环内将全部内存镜像复制到目标服务器上。在这个过程中,KVM 依然会监视内存的任何变化。
图 2. 内存镜像复制示意图
- 以后的循环中,检查上一个循环中内存是否发生了变化。 假如发生了变化,那么 VMM 会将发生变化的内存页即 dirty pages 重新复制到目标服务器中,并覆盖掉先前的内存页。在这个阶段,VMM 依然会继续监视内存的变化情况。
图 3. 进行有变化的内存复制
- VMM 会持续这样的内存复制循环。随着循环次数的增加,所需要复制的 dirty pages 就会明显减少,而复制所耗费的时间就会逐渐变短,那么内存就有可能没有足够的时间发生变化。最后,当源服务器与目标服务器之间的差异达到一定标准时,内存复制操作才会结束,同时暂停源系统。
图 4. 所需复制的数据在减少
- 在源系统和目标系统都停机的情况下,将最后一个循环的 dirty-pages 和源系统设备的工作状态复制到目标服务器。
图 5. 状态信息的复制
- 然后,将存储从源系统上解锁,并锁定在目标系统上。启动目标服务器,并与存储资源和网络资源相连接。
图 6. 停止源服务器,启动目标服务器
Virtual-to-Physical 虚拟机到物理机的迁移
V2P 指把一个操作系统、应用程序和数据从一个虚拟机中迁移到物理机的主硬盘上,是 P2V 的逆操作。它可以同时迁移虚拟机系统到一台或多台物理机上。尽管虚拟化的基本需求是整合物理机到虚拟机中,但这并不是虚拟化的唯一的应用。比如有时虚拟机上的应用程序的问题需要在物理机上验证,以排除虚拟环境带来的影响。另外,配置新的工作站是件令 IT 管理者头痛的事情,但虚拟化的应用可以帮助他解决这个难题。先配置好虚拟机,然后运用硬盘克隆工具复制数据至工作站硬件,比如赛门铁克的 Save & Restore (Ghost)。不过这种克隆方法有两个局限:一个镜像只能运用在同种硬件配置的机器上;要想保存配置的修改,只能重做新的镜像。
V2P 的迁移可以通过确定目标的物理环境来手动完成,如把一个特定的硬盘加载到虚拟系统中,然后在虚拟环境中安装操作系统、应用程序和数据,最后手动修改系统配置和驱动程序。这是一个乏味且不确定的过程,特别是在新的环境比旧的环境包含更多大量不同的硬件的情况下。为了简化操作,我们可以利用专门的迁移工具以自动的方式来完成部分或全部迁移工作。目前支持 V2P 转换的工具有 PlateSpin Migrate 和 EMC HomeBase。使用这样的工具使得 V2P 转换过程更简易,并且比使用第三方磁盘镜像工具更快捷。
V2P 迁移方法
V2P 的不确定性导致自动化工具不多,目前主要有以下几种解决方案:
- VMware 官方推荐的是使用 Ghost+sysprep 来实现半自动化的迁移。
- 基于备份和恢复操作系统的解决方案。这个方案利用了现成的系统备份恢复工具,没有体现虚拟机和物理机的差别,类似于 P2P(Physical-to-Physical 物理机到物理机迁移)。注意备份工具能够恢复系统到异构硬件平台上。
- 开源工具的解决方案。适合 Linux/Unix 系统,使用开源工具和脚本,手动迁移系统。这个方案难度较大,适合有经验的管理员。
通常我们期望虚拟机的迁移能够全部自动化或者部分自动化完成,但实际上 Linux 系统在 P2V 和 V2V 的迁移中可能遇到一些困难。本节列举了 Linux 迁移中需要注意的地方。
-
- 磁盘分区名被硬编码。当我们做磁盘虚拟化时,可能会使用不同类型的虚拟磁盘设备,这将会导致磁盘名字的变化。比如 Xen 虚拟机中的半虚拟化设备使用 /dev/xvda 而标准的 Linux 半虚拟化设备使用 /dev/vda。准备迁移的 Linux 系统中存在对 /dev/hd* 和 /dev/sd* 磁盘分区名分散的关联,比如在 /etc/fstab 文件,启动初始化文件系统 ramfs 和一些解析磁盘设备的开机启动脚本文件中。V2V 迁移工具需要在整个磁盘上查找并修改这些关联。有一个简单的方法来避免这种情况: Linux 系统上主流的文件系统和交换分区类型可以使用 Lables 或 UUID 作为分区名。迁移时这些信息是被重点保护的,系统应该小心使用这些信息,一定不要使用设备作为分区名。另外,LVM 分区名和设备无关,在迁移中也不受影响。
- 网络硬件设备的改变。当系统迁移时,网络设备很可能产生变化。比如虚拟网络设备和物理网络设备的转化或者不同类型的网络设备之间的转变。但是是他们的 MAC 地址没有变化。MAC 地址是 IEEE 分配给物理设备制造商的,两个物理设备不会有相同的 MAC 地址;然而虚拟网络设备可能出现这种情况。所以在做虚拟机迁移时,你必须记录每一个网络设备的 MAC 地址,保证 MAC 地址和网络设备的对应关系。
- 内核不支持某些虚拟设备。某些 Linux 发行版没有 virtio 虚拟设备的驱动,可能是因为 Linux 发行版早于虚拟设备发布了;或者虚拟设备的驱动是闭源的;或者是在系统编译时去掉了。因此,有时我们另外需要一个完全不同的内核(比如 Xen 早期的版本就是这样的)。无论如何,在客户机上安装一个新的内核并且使之可以启动是一个很大的冒险,最好避免这样做。
- Xwindow 需要重新配置。与磁盘、网络设备一样,系统迁移后显示设备也会变化。理想的情况是 Xwindow 会自动处理这个的变化,探测所有的显示设备并且使用它发现的第一个设备。但是这不意味着所有的 Linux 发行版都会以这种方式工作。
- 网络环境的变化。静态 IP 地址和静态 DNS 解析在虚拟机迁移中
是
一个麻烦的事情。尽管不是必须的,但是最好配置系统从 DHCP 服务器自动获得所有的网络配置信息。 - CPU 的扩展指令集发生变化。迁移后的系统中,新的虚拟 CPU 或主板和旧的会有一些不同。CPU 的扩展指令集如 SSE,Vectors, NX 可能被加入或去掉。CPU 的型号和制造商信息可能被改变。因此,如果你想要优化虚拟系统上的软件,这可能是浪费时间并且导致系统崩溃。最好是使用通用的软件,让程序在每次启动的时候检查运行环境和是否需要优化。实际上,实时迁移的状况比这个还要复杂,因为处理器可能在程序的运行的过程中被改变。目前为止还没有一个方案能很好的解决这个问题。
如你所见,P2V 和 V2V 最大的问题在于硬件的改变。Linux 发行版本身应该可以处理所有的硬件变化:在系统启动的时候去检查所有的硬件,操作系统内核识别新的设备并寻找新的驱动处理它们 ,所有应用软件都不要和硬件绑定,设计一个很好的模式来应对突然的环境变化。
虚拟机所呈现出来的虚拟硬件通常与原始服务器上的物理硬件不同。P2V 迁移工具是这样解决这个问题的:
- VMware vCenter Converter:支持从诸如物理机、VMware 和 Microsoft 虚拟机格式以及某些第三方磁盘映像格式的源进行转换。他替代了旧的迁移工具 VMware Workstation Importer 和 VMware P2V Assistant。VMware vCenter Converter 可以支持和识别大多数服务器硬件类型。VMware vCenter Converter 提供以下两种克隆机制:热克隆(实时迁移)和冷克隆(使用 BootCD 的克隆)。使用热克隆时,VMware vCenter Converter 直接与源物理机上运行的操作系统通信,因此没有直接的硬件级别依赖性;使用冷克隆时,VMware vCenter Converter BootCD 提供一个可支持最新硬件的 Windows PE 引导环境,因此可以识别大多数物理服务器系统硬件。目前只支持基于 Microsoft Windows 的物理机迁移。
- XenConvert:是 XenServer 物理机到虚拟机的迁移工具。不仅可以迁移 Window 物理机到 XenServer 管理的虚拟机,而且可以导入 VMware 虚拟机 VMDK 格式和 OVF 包。
- Virtual Machine Manager 2008: 提供基于任务的向导,将自动执行大部分转换过程,以此来简化 P2V 转换。由于可通过编写脚本来完成 P2V 转换过程,因此可以通过 Windows PowerShell 命令行进行大规模的 P2V 转换。VMM2008 同时支持联机转换和脱机转换。
- Symantec Ghost:制作镜像文件和把镜像文件恢复到虚拟机。用来把需要迁移的服务器的硬盘通过网络做成镜像文件,然后通过网络把镜像文件恢复到虚拟机。
- Virt-p2v:RedHat 的开源迁移工具。
支持 V2V 迁移是虚拟机的管理工具的重要功能,所以各种虚拟化软件都提供了实现 V2V 迁移的模块或工具。V2V 在线迁移大大的减少了虚拟机的迁移的停机时间。这使动态迁移成了用户在需要不间断工作时迁移虚拟机的首选。通常的在线迁移方案,是虚拟机使用共享存储,迁移时只拷贝虚拟机的内存。原理参见前面的小节“V2V 内存迁移技术”。
VMware VMotion
VMware 的在线迁移是由 VMotion 这个组件实现的 。Vmotion 的实时解决方案的特点是有其自己的 Cluster File System: VMFS,此外也支持 NFS。Vmotion 把整个虚拟机包括其完整状态封装在几个文件中,存放在 SAN/NAS 等共享存储中。迁移的过程是把内存和运行状态通过高速网从源复制到目标。
Citrix XenMotion
XenMotion 是 XenServer 的一项功能,能够将正在运行的虚拟机从一台 XenServer 主机上迁移到另外一台,而不带有停机的危险。这就意味着在整个迁移过程中,被移动的虚拟机在任意时刻都可以访问。XenMotion 的主要目的是在某台服务器进行计划维修时,使终端用户觉察不到应用程序出现过极短暂的中断,令整个服务过程正常顺畅。
Microsoft Hyper-V
微软的 Hyper-V 从 2.0 开始支持了动态迁移技术。利用 Hyper-V 动态迁移,在不中断任何服务或者不允许停机的前提下,将一个运行中的虚拟机从一个 Hyper-V 物理主机移动到另外一个上面,通过预复制迁移的虚拟机中的内存到目的主机。管理员或者脚本在启动动态迁移的时候控制选择此次迁移的目标计算机,客户使用被迁移系统时是不会感觉到迁移在进行的。
QEMU-KVM/Libvirt
内核虚拟机 KVM 技术的原创公司 Qumranet 在 2008 年被 RedHat 收购以后,得到了全面快速的发展。在 2009 年发布的 Redhat Enterprise Linux 5.4 全面支持了 KVM 虚拟机,其中已经包含了离线迁移和在线迁移的技术。2010 年发布的 Redhat Enterprise Linux 5.5 和 Suse Linux Enterprise Server 11 Service Pack 1 中集成了图形化的 KVM 虚拟机管理工具 virt-manager,使虚拟机的迁移更加直观和方面。在本系列文章的下一篇中将详细介绍如何迁移 KVM 虚拟机。
目前许多企业都已将包括 CPU、内存、I/O、存储、网络在内的数据中心设备进行了虚拟化,如何更好管理和利用这些虚拟的和物理的资源,已经成为数据中心异构虚拟化时期急需解决的问题。P2V 迁移工具使物理资源虚拟化、数据中心转移更加简单;V2V 迁移工具使虚拟资源达到最优化配置;而 V2P 迁移工具可以快速部署虚拟机到物理机。在不远的将来,P2V/V2P/V2V 工具都会失去原有的意义,所有功能的实现都集成到一个智能化、自动化、自治化数据中心的优化系统中去。 高度自动化的监测模块将 24 小时扫描整个数据中心,寻找过载和闲赋的虚拟机;规划模块根据监测报告和收集的信息选择最好的迁移工具进行资源优化,迁移过程将在应用程序正常运行的状况下自动执行。那时,整个环境就像液体一样可以自由流动,负载不停地在各服务器上保持着均衡,虚拟环境与物理环境对用户将再无差别。
云计算就是以服务的形式提供计算资源。云计算背后最重要的概念之一就是可伸缩性,而实现它的关键则是虚拟化。虚拟化在一台共享计算机上聚集多个操作系统和应用程序,以便更好地利用服务器。虚拟化还允许在线迁移,因此,当一个服务器超载时,可以将其中一个操作系统以及它的应用程序迁移到一个新的、不繁忙的服务器上。在云中,可以在多个操作系统和应用程序之间共享虚拟化服务器,从而减少服务器的数量。更少的服务器意味着需要更少的空间(减少数据中心占用的空间)和更少用于制冷的电力(减少碳污染)。 IBM 认为,虚拟化是未来云计算架构的关键组成模块,而衡量一家 IT 企业的“云”能力的关键也正是其虚拟化实施能力。虚拟化技术正在普及,也许不用太久,我们每天都会与虚拟机打交道。
本文介绍了虚拟机迁移的各种方法及工具,分析了内存预拷贝技术的原理,还列举了虚拟机迁移中应该注意的问题。不仅对于系统管理员全面了解迁移方法和策略,进行虚拟机迁移规划有参考意义;而且对于虚拟机的开发和测试人员也有指导意义。本系列后面的文章中,将具体介绍在 KVM 虚拟机上,如何操作和实现系统迁移。
KVM 虚拟机在物理主机之间迁移的实现
如何从一台物理主机上迁移 KVM 虚拟机到另一台物理主机
简介: 虚拟机的迁移使资源配置更加灵活,尤其是在线迁移技术,提高了虚拟服务器的可用性和可靠性。本文是虚拟机迁移技术漫谈系列的第二部分,详细介绍 KVM 虚拟机在物理主机之间的静态迁移和在线迁移特性,而且包括基于数据块的在线迁移实现。
本文的标签: kvm虚拟机迁移, linux_virtualization
虚拟机的迁移技术为服务器的虚拟化提供简便的方法。目前流行的虚拟化产品 VMware,Xen,Hyper-V,KVM 都提供各自的迁移工具。其中 Linux 平台上开源的虚拟化工具 KVM 发展迅速,基于 KVM 的虚拟机的迁移特性也日趋完善。本文全面介绍 KVM 虚拟机在不同的应用环境下的静态迁移(离线迁移)和动态迁移(在线迁移),并且在最新发布的 Suse Linux Enterprise Edition 11 SP1 上分别演示如何应用 libvirt/virt-manager 图形化工具和基于命令行的 qemu-kvm 工具进行迁移操作。
V2V 虚拟机的迁移是指在 VMM(Virtual Machine Monitor)上运行的虚拟机系统,能够被转移到其他物理主机上的 VMM 上运行。VMM 对硬件资源进行抽象和隔离,屏蔽了底层硬件细节。而迁移技术的出现,使得操作系统能在不同的主机之间动态的转移,进一步解除软,硬件资源之间的相关性。本系列的第一篇文章“虚拟机迁移技术漫谈”中,介绍了 V2V 迁移的三种方式,本文将更加详细的说明三种方式的不同和实现方法。
静态迁移
静态迁移:也叫做常规迁移、离线迁移(Offline Migration)。就是在虚拟机关机或暂停的情况下从一台物理机迁移到另一台物理机。因为虚拟机的文件系统建立在虚拟机镜像上面,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理主机上;如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷
贝状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要显式的停止虚拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。
共享存储的动态迁移
动态迁移(Live Migration):也叫在线迁移(Online Migration)。就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。
目前主流的动态迁移工具,VMware 的 VMotion,Citrix 的 XenMotion,他们都依赖于物理机之间采用 SAN(storage area network)或 NAS(network-attached storage)之类的集中式共享外存设备,因而在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而获得较好的迁移性能。
图 1. 共享存储的动态迁移示意图
如图 1 中所示的动态迁移,为了缩短迁移时间和服务中断时间,源主机和目的主机共享了 SAN 存储。这样,动态迁移只需要考虑虚拟机系统内存执行状态的迁移,从而获得较好的性能。
本地存储的动态迁移
动态迁移基于共享存储设备,为的是加速迁移的过程,尽量减少宕机时间。但是在某些情况下需要进行基于本地存储的虚拟机的动态迁移,这就需要存储块动态迁移技术,简称块迁移。
- 比如某些服务器没有使用 SAN 存储,而且迁移的频率很小,虚拟机上的服务对迁移时间的要求不严格,则可以使用存储块动态迁移技术;另一方面,SAN 存储的价格比较高,尽管 SAN 存储能够提高迁移性能和系统的稳定性,对于中小企业仅仅为了加快迁移速度而配置昂贵的 SAN 存储,性价比不高。
- 在集中式共享外部存储的环境下,基于共享存储的动态迁移技术无疑能够工作得很好。但是,考虑到目前一些计算机集群并没有采用共享式外存,而是各自独立拥有本地外存的物理主机构成。基于共享存储的迁移技术在这种场合下受到限制,虚拟机迁移到目的主机后,不能访问其原有的外存设备,或者需要源主机为其外存访问提供支持。
为了拓宽动态迁移技术的应用范围,有必要实现一个包括虚拟机外存迁移在内的全系统动态迁移方案。使得在采用分散式本地存储的计算机集群环境下,仍然能够利用迁移技术转移虚拟机环境,并且保证迁移过程中虚拟机系统服务的可用性。
图 2. 本地存储的动态迁移示意图
相比较基于共享存储的动态迁移,数据块动态迁移的需要同时迁移虚拟机磁盘镜像和虚拟机系统内存状态,延长了迁移时间,在迁移性能上打了折扣。
准确来说,KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具。
- 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 的关系。
- Libvirt、virsh、virt-manager:尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易于使用。Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令—— virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的是图形用户界面,这就是 virt-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,包含了 kvm-0.12.3,libvirt-0.7.6,virt-manager-0.8.4,全面支持 KVM 虚拟机。本文中的物理服务器和外部共享存储配置如下表:
表 1. 硬件配置
物理主机 | 硬件配置 | Host OS | Host Name | IP 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 |
迁移虚拟机之前,我们需要创建虚拟机。创建虚拟机可以使用 QEMU-KVM 命令或者通过 virt-manager 图形化管理工具。
- QEMU-KVM 创建虚拟机镜像文件:见本文的参考资源“KVM 虚拟机在 IBM System x 上应用”。
- virt-manager 创建虚拟机:参考 virt-manager 帮助手册。
静态迁移由于允许中断虚拟机的运行,所以相对简单。首先在源主机上关闭虚拟机,然后移动虚拟机的存储镜像和配置文件到目的主机,最后在目的主机上启动虚拟机,恢复服务。根据虚拟机镜像存储方式的不同,静态迁移的实现方法稍有不同。
如果源主机和目的主机都能够访问虚拟机的镜像,则只需要迁移虚拟机配置文件。比如在本例中的 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 |
静态迁移虚拟的过程中,虚拟机系统处于关机状态,这样虚拟机关机前的运行状态不会保留。如果希望保留迁移前的系统状态,并且在迁移后能够恢复,需要对虚拟机做快照备份或者以休眠的方式关闭系统,详细内容和实现方法将在本系列文章的第五部分介绍。
本文前面“V2V 迁移方式的分类”小节中介绍过,跟据虚拟机连接存储方式的不同,动态迁移分为基于共享存储的动态迁移和基于本地存储的存储块迁移。本小节实现了目前使用最广泛的基于共享存储的动态迁移。实现这种实时迁移的条件之一就是把虚拟机存储文件存放在公共的存储空间。因此需要设定一个共享存储空间,让源主机和目的主机都能够连接到共享存储空间上的虚拟媒体文件,包括虚拟磁盘、虚拟光盘和虚拟软盘。否则,即使迁移完成以后,也会因为无法连接虚拟设备,导致无法启动迁移后的虚拟机。
动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网络,把虚拟机配置和内存运行状态从一台物理机迅速传送到另外一台物理机上,期间虚拟机一直保持运行状态。现有技术条件下,大多虚拟机软件如 VMware、Hyper-V、Xen 进行动态迁移都需要共享存储的支持。典型的共享存储包括 NFS 和 SMB/CIFS 协议的网络文件系统,或者通过 iSCSI 连接到 SAN 网络。选用哪一种网络文件系统,需要根据具体情况而定。本文的实验采用了 NFS 文件系统作为源主机和目的主机之间的共享存储。
图 3. 共享存储的动态迁移实验配置图
-
- 确保网络连接正确,源主机、目的主机和 NFS 服务器之间可以互相访问。
- 确保源主机和目的主机上的 VMM 运行正常。
- 设置 NFS 服务器的共享目录。本文的 NFS 服务器也安装了 SLES11 SP1 操作系统。
清单 3. 配置 NFS 服务
修改 /etc/exports 文件,添加 /home/image *(rw,sync,no_root_squash) rw:可读写的权限; ro:只读的权限; no_root_squash:登入到 NFS 主机的用户如果是 ROOT 用户,他就拥有 ROOT 权限,此参数很不安全,建议不要使用。 sync:资料同步写入存储器中。 async:资料会先暂时存放在内存中,不会直接写入硬盘。 重新启动 nfsserver 服务 # service nfsserver restart |
virt-manager 是基于 libvirt 的图像化虚拟机管理软件,请注意不同的发行版上 virt-manager 的版本可能不同,图形界面和操作方法也可能不同。本文使用了 SLES11 SP1 发行版上的 virt-manager-0.8.4。
首先在源主机和目的主机上添加共享存储。这里以源主机为例,目的主机做相同的配置。
- 添加 NFS 存储池到源主机和目的主机的 vit-manager 中。点击 Edit menu->Host Details->Storage tab。
图 4. 存储池配置图
- 添加一个新的存储池。点击左下角的“+”号,弹出一个新的窗口。输入以下参数:
-
- Name:存储池的名字。
- Type:选择 netfs:Network Exported Directory。因为本文使用了 NFS 作为共享存储协议。
图 5. 添加共享存储池
- 点击“Forward”后,输入以下参数:
-
- Target Path:共享存储在本地的映射目录。本文中这个目录在源主机和目的主机上必须一致。
- Format:选择存储类型。这里必须是 nfs。
- Host Name:输入共享存储服务器,也就是 NFS 服务器的 IP 地址或 hostname。
- Source Path:NFS 服务器上输出的共享目录。
图 6. 存储池设置
- 点击”Finish”后,共享存储添加成功。此时在物理机上查看 Linux 系统的文件系统列表,可以看到共享存储映射的目录。
源主机上创建基于共享存储的 KVM 虚拟机。
- 选择共享存储池,点击”New Volume”创建新的存储卷。
- 输入存储卷参数。本例为虚拟机创建了大小为 10G,格式为 qcow2 的存储卷。
图 7. 添加存储卷
- 在这个共享存储卷上创建虚拟机。本文创建了一个基于 Window 2008 R2 系统的虚拟机。创建虚拟机的具体步骤见本文前面“创建 KVM 虚拟机“小节。
连接远程物理主机上的 VMM。这里以源主机为例,目的主机做相同的配置。
- 在源主机上打开 virt-manager 应用程序,连接 localhost 本机虚拟机列表。点击 File->Add Connection,弹出添加连接窗口,输入以下各项:
-
- Hypervisor:选择 QEMU。
- Connection:选择连接方式 。本文选择 SSH 连接。
- Hostname:输入将要连接的主机名或 IP 地址,这里填写目的主机名 victory4。
图 8. 添加远程 VMM 连接
- 点击 Connect,输入 SSH 连接的密码后,将显示源主机和目的主机上的虚拟机列表。
图 9. 管理远程 VMM
从源主机动态迁移 KVM 虚拟机到目的主机。
- 在源主机上启动虚拟机 Windwos 2008 R2。
- 在虚拟机中,开启实时网络服务(用来验证迁移过程中服务的可用性)。
-
- 开启远程连接服务 remote access,在其他主机上远程连接此虚拟机。
- 开启网络实时服务。例如打开浏览器并且播放一个实时网络视频。
- 准备动态迁移,确保所有的虚拟存储设备此时是共享的,包括 ISO 和 CDROM。
- 在源主机的 virt-manager 窗口中,右键点击等待迁移的虚拟机,选择“Migrate ”。
- New host:选择目的主机的 hostname。
- Address:填入目的主机的 IP 地址。
- Port and Bandwith:指定连接目的主机的端口和传输带宽,本文中没有设定,使用默认设置。
图 10. 虚拟机迁移设置
- 点击“Migrate”和“Yes”开始动态迁移虚拟机。
图 11. 虚拟机迁移进度
- 动态迁移的时间与网络带宽、物理主机的性能和虚拟机的配置相关。本实验中的网络连接基于 100Mbps 的以太网,整个迁移过程大约耗时 150 秒。使用 RDC(Remote Desktop Connection)远程连接虚拟机在迁移过程中没有中断;虚拟机中播放的实时网络视频基本流畅,停顿的时间很短,只有 1 秒左右。如果采用 1000Mbps 的以太网或者光纤网络,迁移时间将会大大减少,而虚拟机服务停顿的时间几乎可以忽略不计。
- 迁移完成后,目的主机的 VMM 中自动创建了一个同名的 Windows 2008 R2 虚拟机,并且继续提供远程连接服务和播放在线视频。源主机上的虚拟机变为暂停状态,不再提供服务。至此,动态迁移胜利完成。
从 qemu-kvm-0.12.2 版本,引入了 Block Migration (块迁移)的特性。上一小节“基于共享存储的动态迁移”中,为了实现动态迁移,源主机和目的主机需要连接共享存储服务。有了块迁移技术以后,可以在动态迁移过程中,把虚拟磁盘文件从源主机迁移至目的主机。QEMU-KVM 有了这个特性以后,共享存储不再是动态迁移的必要条件,从而降低了动态迁移的难度,扩大了动态迁移的应用范围。SLES11 SP1 集成了 kvm-0.12.3,支持块迁移特性。但是 SLES11 SP1 上的 libvirt-0.7.6、virt-manager-0.8.4 暂时没有引入块迁移的功能。所以本文下面的块迁移实验仅基于 QEMU-KVM 的命令行模式。
块迁移过程中,虚拟机只使用本地存储,因此物理环境非常简单。只需要源主机和目的主机通过以太网连接,如”图 2. 本地存储的动态迁移示意图”所示。
QEMU 的控制终端和迁移命令
QEMU 控制终端的开启,可以在 QEMQ-KVM 的命令中加参数“-monitor”。
- -monitor stdio: 输出到文本控制台。
- -monitor vc: 输出到图形控制台。
- 图形控制台和虚拟机 VNC 窗口的切换命令是:
- Ctrl+Alt+1: VNC window
- Ctrl+Alt+2: monitor console
- Ctrl+Alt+3: serial0 console
- Ctrl+Alt+4: parallel0 console
QEMU-KVM 提供了的“-incoming”参数在指定的端口监听迁移数据。目的主机上需要此参数接收来自源主机的迁移数据。
清单 4. 迁移相关的 QEMU 命令
(qemu) help migrate migrate [-d] [-b] [-i] uri -- migrate to URI (using -d to not wait for completion) -b for migration without shared storage with full copy of disk -i for migration without shared storage with incremental copy of disk (base image shared between src and destination) |
在源主机上创建和启动虚拟机。
- 在本地磁盘上创建虚拟机镜像文件。本文创建了大小为 10G,qcow2 格式的本地镜像文件。
清单 5. 源主机上创建虚拟机
victory3:~ # qemu-img create -f qcow2 /var/lib/kvm/images/sles11.1ga/disk0.qcow2 10G
- 在镜像文件上安装虚拟机。本文在虚拟机中安装了 SLES11SP1 系统。
清单 6. 源主机上安装虚拟机
victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0, addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=/media/83/software/Distro/SLES-11-SP1-DVD-x86_64-GM-DVD1.iso, if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive,bus=ide.1, unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:3
- 虚拟机安装完毕后,以下列命令启动虚拟机。添加了“-monitor stdio”是为了开启文本控制台;去掉了虚拟光驱中的 ISO 文件是为了保证迁移时,源主机和目的主机上虚拟设备的一致性。如果你在目的主机的相同路径下存在相同名字的 ISO 文件,则可以在迁移时保留 ISO 文件参数。
清单 7. 源主机上启动虚拟机
victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4, drive=drive-virtio-disk0,id=virtio-disk0 -drive if=none,media=cdrom, id=drive-ide0-1-0 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0, id=ide0-1-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:3
在目的主机上创建和启动虚拟机。
- 在目的主机上为迁移后的系统创建镜像文件,文件的大小必须大于或等于源主机的镜像文件大小。
清单 8. 目的主机上创建虚拟机
victory4:~ # qemu-img create -f qcow2 dest.img 20G Formatting 'dest.img', fmt=qcow2 size=21474836480 encryption=off cluster_size=0
- 使用与源主机上相同的 qemu-kvm 参数,更改镜像文件为目的主机上创建的镜像文件,加上 -incoming 参数指定动态迁移所使用的协议、IP 地址和端口号。因为 -incoming 参数的作用是监听端口,所以目的主机上的虚拟机一启动就处于 paused 状态,等待源主机上虚拟机开始迁移。本例中块迁移使用 TCP 协议,目的主机上的监听端口是 8888 端口。
清单 9. 目的主机上的迁移命令
victory4:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/root/dest.img,if=none,id=drive-virtio-disk0, boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0, id=virtio-disk0 -drive if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive, bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:8 -incoming tcp:0:8888 QEMU 0.12.3 monitor - type 'help' for more information (qemu) info status VM status: paused
迁移源主机上的虚拟机到目的主机。
- 回到源主机上,在等待迁移的虚拟机中开启一些实时服务以验证动态迁移不会中断服务的运行。本例中在虚拟机的终端窗口中用“top -d 1“命令开启 TOP 服务,每秒刷新一次系统进程的信息。
图 12. 等待迁移的虚拟机中开启 TOP 服务
- 在源主机的 QEMU 控制台中输入以下迁移命令,迁移开始。
清单 10. 源主机迁移命令
(qemu) migrate -d -b tcp:victory4:8888 -d 可以在迁移的过程中查询迁移状态,否则只能在迁移结束后查询。 -b 迁移虚拟机存储文件 tcp:ivctory4:8888 数据迁移的协议、目的主机和端口。协议和端口必须和目的主机上虚拟机的 -incoming 参数一致。
- 动态迁移期间,源主机的虚拟机继续运行,TOP 服务没有中断。同时可以在源主机的 QEMU 控制台查询迁移的状态。目的主机的虚拟机处于 paused 状态,从目的主机的 QEMU 控制台可以看到迁移进度的百分比。
清单 11. 监视虚拟机迁移过程
源主机 QEMU 控制台显示正在迁移的数据 (qemu) info migrate Migration status: active transferred ram: 52 kbytes remaining ram: 541004 kbytes total ram: 541056 kbytes transferred disk: 2600960 kbytes remaining disk: 5787648 kbytes total disk: 8388608 kbytes 目的主机 QEMU 控制台显示迁移完成的百分比 (qemu) Receiving block device images Completed 28 %
- 直到动态迁移完成,源主机的虚拟机变成 paused 状态而目的主机上的虚拟机由 paused 状态变成运行状态,TOP 服务继续运行且没有中断。
- 关闭源主机的虚拟机,所有服务已经迁移到了目的主机,至此迁移完成。
本文实现了在 Suse Linux Enterprise Server 11 SP1 发行版上 KVM 虚拟机的静态迁移和动态迁移,特别是基于数据块的动态迁移,使虚拟机的资源配置更加灵活。在其他支持 KVM 的 Linux 发行版上如 Ubuntu、Fedora 也可以完成类似的迁移操作。KVM 虚拟机在不断的增强和完善中,开源社区和 Linux 的系统集成商也在开发各种各样的基于 KVM 的管理工具,将来的 KVM 迁移工具会在性能,功能,可操作性和自动化程度上大大增强。