四川中电启明星信息技术有限公司研发中心 佘文魁 袁 亮 田富强 喻 梅
如今,虚拟化成为一种成熟的技术,允许用户创建自己的私有云,并为许多领域的网络服务提供虚拟机(VM)。由于云上的计算节点通常执行多个虚拟机,否则任何崩溃计算节点的故障可能会导致一组虚拟机失败。这意味着计算设备的可靠性在云时代比以往任何时候都更加重要。因此,有必要使用基于软件的高可用性(HA)机制来保护计算节点上的虚拟机。
A.QEMU和KVM
QEMU 是可以的软件组件模拟硬件设备,由FabriceBellard编写。因为它通过软件模拟CPU,性能有限。为了提高QEMU的性能,新版本的QEMU通常带有KVM,通常称为“QEMU-KVM”。KVM(基于内核的虚拟机)是一个开源项目;它是Linux x86硬件的完全虚拟化解决方案。目前,KVM还与QEMU-KVM一起运行,这是一个特殊版本的QEMU。为了提高速度,QEMU-KVM使用不同的方法来模拟CPU。QEMU-KVM将通过KVM模块将由VM生成的所有CPU指令发送到实体CPU,以运行。
B.Libvirt
Libvirt用于在使用虚拟化技术时解决各种管理不便问题。它支持多种虚拟机管理程序,如KVM,Xen和VMware ESX。它还为各种语言(如C,Python和Java)提供远程过程调用。使用远程API,系统管理员可以轻松地控制另一个计算节点上的虚拟机。
Libvirt通常用于管理KVM的虚拟机,其中Libvirt可以创建通信通道以连接到计算节点上的KVM监视器。通过此通道,Libvirt可以向VM发送命令。此外,当VM进程意外关闭时,节点操作系统还可以向Libvirt守护程序发送错误消息。
C.相关高可用技术研究
许多商业服务器虚拟化软件,软件包支持高可用性功能。例如,VMware ESXi也在其设计中采用集群管理的概念。 VMware ESXi使用心跳作为主要的故障检测方法。如果主HA服务器在给定时间段内无法从VM接收心跳线,则主服务器将尝试验证VM是否正忙于在VMware ESXi群集的数据存储服务器中执行I / O。如果答案为否,主HA服务器将会触发恢复过程。
LW-HA的基本原理与流程如图1所示,控制端对HA的检测与处理各个环节均采用事件监听方式,可支持大规模并发故障处理。这里采用瞬时事件触发和任务轮循并行的方式,即保证检测与恢复的时间最小化,同时又能保证各个环节失败后能自动重试。多点并发启动时,虚拟机启动采用“排它锁”,确保谁优先抢到虚拟机启动锁,由谁执行启动操作,避免两线程同时执行虚拟机启动引起脑裂。
图1 HA总体流程图
计算节点在采集主机注册信息时,将所有网卡设备信息缓存起来。检测时从缓存中遍历所有已配IP的网卡信息,采用命令“ethtool网卡设备名”检测,从输出结果中找到link detected 项的值,如果非”yes”(忽略大小写)则判定为连接中断。计算节点在通信异常时,通过向探测ip清单中所有ip发起通信请求来确认自身是否已成为通信孤岛。
为了提升虚拟机的可用性,减少虚拟机服务停机时间,系统将检测并在尽可能短的时间内将服务中断的虚拟机恢复运行。LW-HA主要对以下六类场景进行设计与实现,如表1所示。
表1
通过对场景的共性进行分析,实际上是解决两类问题,一是虚拟机宕机;二是资源池断电。
(1)前置条件
控制节点及服务运行正常,通信正常。
宿主机运行正常,通信正常。
(2)故障认定
虚拟机宕机认定条件为,同时符合以下四个条件:
主机心跳均正常情况下,主机前一次心跳信息中某虚拟机domain存在,本次主机正常心跳情况下该虚拟机domain不存在。
数据库中记录的宿主机仍为当前主机(排除刚迁移成功或迁移失败,已解锁)。
虚拟机为运行状态(排除刚强制关机成功,已解锁)。
虚拟机未被锁定为“停止中”或“跨主机迁移中”(排除正在停止或正在跨主机迁移)。
(3)调度流程(如图2所示)
图2 主机宕机HA流程图
(1)前置条件
控制节点已启动,控制服务已运行,通信正常。
虚拟机原宿主机已启动,并已成功发送心跳至
控制节点。
(2)故障认定
资源池断电后,数据库中仍然保存有虚拟机的运行状态与宿主机信息,当数据库和控制节点启动后,由控制节点周期性轮循检测关系在宿主机上,但无心跳的虚拟机。
(3)调度流程(如图3所示)
图3 资源池断电HA流程图
以上就是LW-HA的原理及针对典型场景的分析与实现。下一节将通过实验验证该方案。
测试环境:
分别使用3台物理机部署VMware ESXi6.0与LW-HA系统,主机配置信息为IBM3550环境,双Intel(R) Xeon(R) CPU E5-2640 V3 @2.60GHz,共32核,内存64G;虚拟机配置信息为4vcpu,4G内存,虚拟机gustos统一为centos7.1mini。
测试场景一:
在两套系统中创建并运行单台虚拟机,通过系统命令强制关闭,模拟虚拟机故障关闭场景。
测试场景二:
在两套系统中某一主机上创建并运行8台虚拟机,通过对运行虚拟机的主机掉电的方式模拟主机故障。
通过日志记录虚拟机恢复时间间隔,对两种场景进行10次测试采样。
测试结果如下图4,5所示:
图4 单台虚拟机HA测试记录
图5 单台主机HA测试记录
可以看到单台虚拟机HA间隔时间VMware平均4.1秒,LW-HA平均间隔2.4秒;单台主机HA间隔时间VMware平均57秒,LW-HA平均间隔21秒。可以看到LW-HA方案对比VMware具有同样的稳定性和更高的敏感度。
本文在KVM虚拟化平台上,提出一种轻量级的高可用机制(LW-HA),并给出了在不同场景下的实现原理与机制,最后通过实验得出该LW-HA机制在虚拟机宕机恢复及宿主机宕机虚拟机恢复方面均优于商业软件,是一种完美替换商业软件HA的方案,也可以为虚拟机故障恢复机制方面提供一些参考。
[1]KVM官方网站[OL] http://www.linux-kvm.org/page/Main_Page.
[2]QEMU官方网址[OL] http://wiki.qemu.org/Main_Page.
[3]复旦大学并行处理研究所著.系统虚拟化[M].北京:清华大学出版社,2009
[4]倪华婓.虚拟化技术下高可用大规模集群系统HARing的设计和实现,浙江大学,2012.
[5]耿新民,王少峰,许飞.基于VMware的高可用性集群在电力信息系统中的应用[J].上海电力学院学报,2010,26(2):193-196.
[6]熊梦,杨松,莫展鹏等.一种虚拟机高可用机制:,CN 103729280 A[P].2014.