本文承接上篇将具体分析UCloud在典型应用场景下对KVM虚拟化迁移技术各个阶段所做的优化。
快速迁移场景
通过普通应用场景迁移优化之后,UCloud平台上的在线迁移方案已经可以达到很高的迁移成功率,为用户虚拟机的性能与可靠性提供了重要保障。但考虑到部分用户存在大容量数据盘,如果进行正常在线迁移,整体迁移时间会非常长,无法快速降低源物理机负载,不利于资源动态调整和故障处理,特别是当用户虚拟机正在运行高IO负载业务,则会使磁盘迁移过程迟迟无法结束,最终导致迁移失败。为此,UCloud平台针对这种场景专门进行了磁盘高负载虚拟机的快速迁移优化。
由于正常在线迁移在目标端DestHost上拉起虚拟机之后,需要先通过磁盘迁移来确保目标端DestHost上虚拟机访问的磁盘数据和源端SourceHost相同,为此需要跳过磁盘迁移进行快速迁移方案。
首先,需要打通目标端DestHost和源端SourceHost之间的存储系统,即共享两个Host上虚拟机镜像的磁盘数据;在此基础上进行共享存储的跨机迁移,从而实现虚拟机内存、CPU等数据迁移,以便在目标端DestHost快速拉起虚拟机,缓解源端SourceHost的内存和CPU压力。其次,将虚拟机的大磁盘数据从源端SourceHost拉取到目标端DestHost。***,删除源DestHost和目标SourceHost的直接共享存储。
快速在线迁移的具体实现步骤如图 3-1所示:
(图3-1远程拉取磁盘数据示意图)
通过快速迁移优化,完整迁移过程所需时间与传统迁移方法所需时间相当。但迁移过程中,共享存储迁移的过程非常短暂,可以快速在目标端DestHost上拉起虚拟机VM,迅速降低源端SourceHost负载,改善用户VM之间的资源竞争,改善用户VM性能,特别是对拥有大数据盘的VM用户具有重要意义。
目前,UCloud平台的快速迁移方法已经全面上线,成功为众多用户完成快速跨机迁移,帮助用户解决VM的性能与可靠性问题。
跨机型场景
前述各种迁移方法,通常用于相同类型的云主机之间进行迁移。不过需要特别指出的是,目标端云主机和源云主机上的虚拟机配置必须完全一致。在UCloud云平台,除了存在普通云主机机型外,还存在类似方舟机型、SSD机型等许多不同存储类型的虚拟机,其上所使用的虚拟机磁盘配置也并不完全相同。
当用户存在机型切换要求时,以往的做法是对用户虚拟机停机进行机型转换迁移,会造成用户业务中断,不利于用户根据不同业务需求进行不同机型的切换。但当用户提出这种跨机型迁移需求时,通常伴随着其关键业务负载无法满足要求,或者关键业务需要在更加安全可靠的环境下运行,而如果对关键业务进行停机切换又往往无法接受,也极大限制了云平台的弹性扩展。
为了满足用户对机型升级切换的业务需求,同时又不停止虚拟机以保证用户业务在升级过程中继续运行,UCloud为此专门开发了跨机型特殊在线迁移方案。针对跨机型的特殊迁移,关键点在于解决磁盘设备的类型转换问题。在UCloud云平台上,用户虚拟机作为一个Qemu进程运行,该进程需要根据底层磁盘镜像类型选用不同底层块设备驱动进行数据读写。因此,在进行特殊跨存储迁移时,需要通过Libvirt的特殊配置,先在目标端建立一个不同存储类型的虚拟机(其他配置完全一样),然后再进行后续数据迁移。
如图3-2所示,特殊配置之后,源端Qemu将通过qcow2驱动从qcow2磁盘文件中读取客户磁盘数据,再通过网络发送到目标端,目标端Qemu在接收到数据后,再通过raw驱动将数据写入到lvm块设备中。经过多次反复迭代最终完成整个磁盘的迁移,并最终将源端普通云主机上的用户虚拟机迁移切换到目标端SSD机型的云主机上。整个迁移过程对用户是透明的,不会对用户业务造成不利影响,即便目标端虚拟机迁移失败也不会影响源端用户虚拟机的正常运行。
(图3-2 跨机型迁移的存储格式变换示意图)
当前,UCloud云平台可以实现普通云主机到SSD云主机的相互迁移,也可以实现普通云主机到方舟高可靠机型的相互迁移,甚至通过这种迁移实现底层磁盘类型的转换,从而方便用户根据业务需求切换不同云主机类型,而且不需要中断线上业务就实现云平台弹性与扩展性的提高。
这种跨机型迁移技术目前在国内云服务提供商中是首创,极大提高了用户选择的弹性,有利于用户按需根据业务的运营状况适时的选择不同的云服务。
本地升级场景
使用UCloud云平台的在线迁移方案,可以实现在用户无感知的情况下,将用户虚拟机迁移到升级过的新虚拟化运行环境中,在避免中断用户业务的前提下,实现对虚拟化组件的性能优化、故障修复以及新功能上线等软件升级。
然而,在线迁移过程中,迁移用户磁盘镜像数据花费时间占到整体迁移时间的绝大部分,特别是大磁盘用户,进行一次跨机在线迁移所需时间往往是数小时。而且在线上运行大量虚拟机的情况下,如果都进行在线迁移要花费的时间成本非常巨大,这使得在线迁移方案无法大规模用于虚拟化环境的升级。
当前,UCloud云平台的虚拟化组件就由KVM、Qemu和Libvirt等构成,同时大多数软件升级是通过升级Qemu和Libvrit完成。由于Libvirt位于虚拟化组件最上层,其升级不会影响正在运行的虚拟机,可直接生效,无需停机和迁移就能完成,而Qemu升级一般需要通过在线迁移才能保证无感知升级。
前面也提到磁盘迁移占据大部分迁移时间,如果能够避免磁盘迁移就可以极大节省软件升级的时间。为此,UCloud云平台专门开发了本地热迁移方案,以完成对Qemu软件的性能优化、故障修复、漏洞修补以及新功能上线等升级功能。这种方法无需迁移虚拟机磁盘,只进行内存迁移,从而快速完成软件升级。
如图3-3所示,在进行本地热升级时,需要在本地安装新版Qemu_new,而原有虚拟机VM_old仍为旧版Qemu_old,之后将创建一台相同配置的新虚拟机VM_new。此时,新建虚拟机VM_new的Qemu版本为Qemu_new,并且新虚拟机VM_new正处于paused状态。新虚拟机VM_new和旧虚拟机VM_old之间通过socket文件进行内存数据迁移,这个迁移过程与普通在线迁移过程一致,也是先进行一次全量内存迁移,再进行多次迭代增量内存迁移,并短暂停机完成***一次内存和虚拟机机器信息等迁移。
(图3-3 虚拟机本地迁移的内存迁移过程)
本地热迁移方案已在UCloud云平台上大规模应用,在实际使用过程中,不仅具备普通在线迁移的优点,而且整个迁移过程更加快速,基本上可以秒级完成用户虚拟机的Qemu升级,对用户基本没有影响。目前,UCloud已经使用本地热迁移方案成功解决了多个高危安全漏洞对线上Qemu的影响,另外通过本地热迁移方案还实现对线上运行Qemu版本的精简统一,方便Qemu版本的维护工作。
总结
综上所述,目前UCloud虚拟化云平台已经对热迁移技术进行了全方位优化,包括热迁移技术各个阶段(宿主机选择、磁盘和内存优化、网络切换设置等)的优化、快速迁移优化、跨存储类型迁移优化和本地热升级优化等。此外,UCloud虚拟化云平台还提供单独迁移虚拟机磁盘内容的磁盘漂移技术以及针对加密盘的迁移技术。这些迁移技术在UCloud云平台上广泛用于用户虚拟机负载均衡、宿主机故障处理,甚至各种虚拟化组件在线升级等。
通过这些全方位迁移优化,极大保证了用户虚拟机的不间断稳定运行,有力地凸显了UCloud虚拟化云平台高效、弹性、高可靠性的优势。后续UCloud还将继续对跨机热迁移技术的高内存负载、GPU机型以及其他使用新型网卡、加速卡的特殊VM场景进行深入开发和优化。
【本文是51CTO专栏机构作者“大U的技术课堂”的原创文章,转载请通过微信公众号(ucloud2012)联系作者】