基于KVM虚拟化在线迁移优化方案研究
潘力
摘 要:针对云计算环境下在线迁移的问题,文章提出了一种基于内核虚拟机的在线迁移优化方案,研究目的是在KVM虚拟化平台中实现虚拟机跨越迁移,保证数据的两端一致性,从而实现各种大型云平台负载平衡、系统的实现运行和维护、保证虚拟机性能的稳定性和可靠性。实践证明提出的优化方案能够很好地解决线上各种迁移场景转换,为迁移工作的稳定与可靠提供了重要技术支持。
关键词:KVM;虚拟化;在线迁移
云计算是针对如何通过互联网对虚拟化硬件计算资源池进行访问的一种计算模型。用户可以在线支付相关费用使用云计算资源及相关服务,同时可以参与开发各种基于虛拟资源的扩展插件。云计算的核心技术主要指虚拟化技术,通过耦合技术实现底层硬件和上层软件服务分离,最终目的是通过云计算的虚拟化技术实现本地物理资源的云端和异地重新整合与分配,降低存储成本,提高本地和云端资源的使用效率[1]。云计算服务包括虚拟机在线迁移技术服务,服务内容主要包括云计算资源和服务供应商统一管理大规模的云计算资源,云存储资源,实现高效的运营管理成本及效率。虚拟化在线迁移过程中需要务必保证虚拟机服务应用程序的持续安全运行,不能意外中断。虚拟化在线迁移指的是通过云端虚拟机从一个本地的具体的物理主机将虚拟机数据磁盘,内存数据和设备状态迁移到另一个异地的物理主机,但是,由于虚拟机在线迁移过程中的数据传输需要占用相当一部分硬件资源,导致虚拟机在线迁移服务在整个过程中将受到影响,特别是当虚拟机的运行占用较高、内存不足时,虚拟机上的应用程序将可能导致诸多意外的中断[2]。因此,虚拟机在线迁移时间的优化已成为研究热点。
1 KVM虚拟化技术
通过虚拟交换机(Kernel-based Virtual Machine,KVM)模块上的内存和处理器虚拟化使客户端在虚拟环境中运行并支持这些客户虚拟机的运行即可实现KVM完全虚拟化。完成基于Linux内核在线虚拟化迁移解决方案完全有必要借助于一款免费且开源的系统,如KVM[3]。KVM体系结构如图1所示,基于架构的设计模块和思路发现,最初的设计是基于内核的模块化设计主要是指开源且免费的KVM内核。随着Linux内核的不断扩展,更多复杂的高集成度的虚拟化功能聚合到一起,所以KVM逐渐发展成为Hyperbivisor虚拟监视器模式。在KVM中,虚拟机基于Linux内核,运行进程收Linux受指令控制,KVM虚拟机是通过多个QemuI/O来模拟完成的,服务于多个用户。
2 在线迁移
在线迁移,是将源主机上的虚拟机(Virtual Machine,VM)(此处为源VM)迁移到目的主机,在迁移完成后目标主机上的VM(即目标VM)需要继续运行源VM上的应用服务。因此,需要保证源VM和目标VM之间的信息状态完全一致,为了实现源VM和目标VM间的完全同步,在迁移中需要向目的服务器传送源VM的各种信息,包括中央处理器(Central Processing Unit,CPU)寄存器的状态、内存中加载运行的页面数据、磁盘的文件系统和I/O设备的使用状态[4]。由于各部分信息所包含的数据量不同,以及对虚拟机运行的重要性不同,迁移处理的方式也不完全相同。
3 技术模块
当CPU开始在线虚拟化进程时,首先KVM模块需要初始化VM中的内存数据,检测处理器运行状态,一切检测符合设置时,运行计算机进行初步虚拟化操作。接着,打开本地和异地的VM主机是实现虚拟化第二步,紧接着通过一连串的进程指令创建必备的虚拟化系统文件。在虚拟机的创建和运行的后台运行模式种,务必需要保证用户模拟器(QEMU)和KVM两个模块的持续不间断的安全运行。虚拟化过程中,系统设定是通过设计好的设备状态和运行文件保证KVM模块和用户模拟器之间信息交互式访问和请求实现。在最初的KVM设计中,只需要在设备中写入dev和KVM两个参数文件,实现第一个虚拟机的初步的创建完成。在实现虚拟化在线迁移的过程中,常常遇到的一个难题就是如何更好地实现内存的可用性,即将内存虚拟化有效聚合到KVM模块中。在最新的技术解决方案中,在KVM模块中添加进了一种多维应答机制,首先记录虚拟内存首次请求访问时间,记录下来,并且反向追踪两个地理位置编码及位置编码,可以方便地将需要虚拟物理地址同实际物理地址进行对调,同时隐藏地址信息。
通过软件编程及图形化界面展示的用户模拟器具有两个最突出的优点:第一个优点是在支持编译和操作的编译环境或者软件平台上可以实现在线虚拟化;第二个优点是支持各种异构系统模式。最新的用户模拟器已经实现了全硬件的技术支持,同时可以支持多终端的控制以及多模式自动切换,增加了WINDOWS系统的支持。传统的运行模式需要用户首先切换到系统默认的仿真模式环境中,然后等待系统调用内核完成后,依赖于Linux的指令实现进程一步步运行。一个更超前的的虚拟机设计计划已经被诸多云计算服务商尝试于用户模拟器中,第一阶段的代码实现了外设虚拟化的接入,同时完整地嵌入了全部CPU以及完整的内存,这种先进的设计逐步被众多技术员与用户所接受。随着技术的改进和代码的优化,更多基于KVM模块的用户模拟器优化方案被提出来,例如在虚拟机运行过程中时,使用KVM模块将用户模拟器优先调用到Linux内核中,并将用户模拟器置于相应的运行模式,而不是传统的模式。每当虚拟机处理输入和输出操作请求时,由用户模拟器决定是否需要调用KVM获取上一次的接入信息调用并反馈给用户模拟器。进一步理解,用户模拟器使用KVM模块的目的是提供基于全硬件资源下的虚拟化加速,从而将虚拟机的处理效率和内存占用控制在一个合理的阈值内。换句话说,我们将在用户模拟器的代码写入一个共享的设备文件中,同时加载入KVM模块中的代码文件,两者的代码可以互相调用并检测运行状态,这样用户模拟器可以根据设备文件的返回参数决定是否有必要更改当前的环境设置或者直接停止并调用备用虚拟加速资源。综合当前主流技术,KVM完全可以聚合任何选择支持的模拟程序,但是实际运行结果显示目前最成熟的案例还是用户模拟器与KVM的匹配模式。
Libvirt是支持Linux环境下的免费、开源的最主流的虚拟化工具的C函数库,可以为不同类型的虚拟机监视器比如Hyperbivisor虚拟监视器分享一个统一的图形化管理模式。 Libvirt不是Tools,而仅仅是为虛拟化技术服务提供管理工具的API库。Libvirt除了支持监视器服务外,最主要的任务是方便管理员管理虚拟机和虚拟机上运行参数控制包括磁盘存储空间的分配与管理,网络状态的控制,内存占用控制和最关键的虚拟化迁移进程保证等。
在线迁移包括3个阶段:准备阶段,迁移阶段和转换阶段,介绍了基于KVM虚拟化技术的在线迁移方案。同时,研究如何通过UCloud底层KVM虚拟化技术优化虚拟机的在线迁移[5-7]。其中,迁移环境为虚拟化的底层KVM + Qemu,虚拟化管理Libvirt,虚拟化网络Openvstack。
4 结语
通过上述的在线迁移优化步骤,可以在KVM虚拟化平台中实现虚拟机跨越迁移,保证数据的两端一致性,从而实现各种大型云平台负载平衡和系统的实现运行和维护保证虚拟机性能的稳定性和可靠性。同时,从用户的角度来看,可以持续与虚拟机交互,整个迁移过程对用户来说是透明的。目前的KVM虚拟化在线迁移可以适应大多数用户虚拟机迁移,避免繁琐的步骤,并减少数据丢失的可能性。
[参考文献]
[1]杨坤.基于Xen的虚拟机迁移的研究及应用[D].兰州:西北师范大学,2013.
[2] 周扬,龚畅,徐平平.基于动态目标遗传算法的云计算工作流调度方法[J].湘潭大学自然科学学报,2017(1):123-126.
[3]张博.基于Xen的虚拟化在线迁移技术的研究与实现[D].沈阳:中国科学院研究生院(沈阳计算技术研究所),2016.
[4]张翔.虚拟机性能优化和迁移关键技术研究[D].北京:中国科学院研究生院(中国科学院大学),2011.
[5]贺佰元.面向电信业务的Xen虚拟机迁移的研究及优化[D].北京:北京邮电大学,2013.
[6]沈晓茹.基于虚拟集群在线迁移的虚拟化资源整合算法研究[D].长春:吉林大学,2014.
[7]蒋本立.基于“微课”建设的移动云平台的设计[J].湘潭大学自然科学学报,2016(1):120-122.