刘洪磊 沈健 王涛
摘要 本文选择了Ubuntu Linux宿主操作系统+VirtualBox虚拟机实现了集群管理层,增加了各类虚拟设备包括软件定义串口、软件定义声卡、软件定义CAN口和软件定义显示,修复了客户机3D加速缺陷,重写了网络虚拟设备以支持万兆网,基本达到了实用程度,在各种场景下掉电测试可用性约为99%。
【关键词】虚拟机 高可用集群 终端集群
1 高可用集群介绍
高可用集群(High?Available Cluster),指一类以减少业务的服务中断时间为目的的服务器集群。它通过一定集群技术保护业务程序运行,降低因软硬件或人为故障对用户业务的影响。
集群的可用性一般通过集群可靠性(Reliablity)和可维护性(Maintainablity)衡量。项目上一般采用平均无故障时间(MTTF)指标以度量系统可靠性,采用平均维修时间(MTTR)指标以度量系统可维护性,因而集群可用性指标计算公式为:HA=MTTF/(MTTF+MTTR)*100%,99.9%约为一年内连续服务时的中断时间不超过10小时。
通常业界提及的高可用集群,一般指C/S或B/S架构中的服务器(server)集群——如数据库服务器集群、WEB服务器集群、文件服务器集群等。一个高可用服务器集群由多个联网的服务器硬件节点和管理套件构成。管理套件一般汇总集群内的软硬件资源信息,相互检测节点心跳,在节点故障时切换网络、把指定的业务程序在其它节点启动起来。这类管理套件已经成熟,所管理的设备一般仅限计算、存储和网络设备,中心机房部署较多。
在实际应用中,大量面向终端用户的业务程序——例如文档程序、绘图程序、分析程序等,也需要高可用性。这类业务程序在正常运行时,除了计算、存储和网络等设备外,通常还需要有键盘、鼠标、显示器或触摸屏,以及各类外设如COM串口、声卡或摄像头等设备。对于一些特殊场景,例如话务中心、指挥中心等,一般一个终端席位对应着一个固定职责。这类场景的高可用终端集群,需要保存业务程序的状态,并处理业务程序与键盘鼠标、显示以及各类外设的关系。此处我们提出了一种基于虚拟机(Virtual Machine)的集群实施方案,结合软件定义硬件(SDHW,Software Defined Hardware),实现了高可用终端集群。
2 基于虚拟机的高可用终端集群方案
2.1 系统方案概述
高可用终端集群系统由集群硬件和集群软件构成。集群硬件提供软件运行环境。集群软件与支撑硬件一起提供给用户应用程序一个运行环境。
高可用终端集群硬件,包括固定在终端席位的键盘鼠标显示器或触摸屏,联网的计算机,及各类已固定连接的串口或声卡外设等,按作用划分为计算存储层、交换控制层、接口转换层等3层。
其中,各主要组件通过10G以太网联网。计算机就是一个符合一定标准的独立计算机,运行业务程序。存储服务器挂载多个RAID磁盘,提供集群存储。切换板负责高速视频数据与USB数据切换。接口板具有显示制式转换、网络外设输出等功能,外接显示器、麦克风音响和串口等。集群内网络被分为3个平面,存储网络提供NAS/SAN存储或磁盘数据同步服务,管理网络提供低速外设网络化和集群心跳、应用迁移等服务,业务网络供最终用户自己使用。
高可用终端集群软件,包括物理(宿主)机系统,虚拟机软件,各类软件定义设备,集群管理软件以及用户操作系统、用户应用等,按作用可粗略划分为设备定义层、集群管理层、操作系统层、用户应用层等4层。
其中,各主要组件如有必要通过网络通信交互。设备定义层,按照软件定义硬件(Software Defined)思想设计,对显示、声卡以及串口等外设进行网络化、虚拟化处理,以满足终端集群的高可用需求。集群管理层,主要结合软件定义设备、虚拟机等,提供给用户一个操作系统安装环境。操作系统与用户应用,由用户依据需求而安装。在用户应用层内,提供一个集群管理客户端,让用户设置策略管理集群。
该集群系统将提供给用户一个高可用终端运行环境。例如,用户的业务程序正在一个主板上运行,当该主板故障时,这个主板上的操作系统连同业务程序将自动迁移到指定主板上,恢复以前运行状态,继续工作。原来用户所在的键盘鼠标、显示器等继续可用。原有外设所接的设备如声卡外接麦克风、串口GPS等可以继续工作。
2.2 硬件环境设计
本集群内的计算机、交换机、存储服务器等组件,选择市场通用IT基础设施即可。其中建议计算机选择DisplayPort输出接口,可以输出到多类制式的显示器,支持热插拔完成在线显示切换。本集群内的切换板、接口板,可以选择市场单板拼装或者自行开发。切换板完成显示切换,可选择市场高端KVM切换器替代。接口板提供显示器制式转换、网络化串口、声卡等功能,可选择多个市场设备组装。为了最终设备简洁可靠,方便终端用户使用,可以自行开发该集群硬件。
2.3 虚拟机选型
虚拟机(Virtual Machine,VM)技术是虚拟化的一种常用技术,指通过软件模拟的一个具有完整硬件功能的、运行在物理硬件隔离环境中的计算机系统。此处根据上下文,虚拟机有时指称提供虚拟机运行环境的管理软件(Virtual Machine Supervisor),或者仅指运行在模拟硬件上的一个客户机操作系统(Guest Machine OS)。市场常用的虚拟机软件如VMWare公司的Vmware虚拟机、ESX服务器,微软公司的Hyper-V虚拟机,Oracle公司开源VirtualBox虚拟机,原剑桥大学开源的XEN虚拟机,Redhat公司开源的KVM虚拟机等。虚拟机监视器(VMM,Virtual Machine Monitor)是虚拟机运行核心,它是一层处于计算机硬件(或宿主机系统)与客户机操作系统之间的代码,运行在特权模式,隔离并管理上层运行的虚拟机,仲裁虚拟机对底层硬件的访问。它结合虚拟机的設备管理模块,为每个客户机操作系统虚拟一套独立于实际硬件的虚拟硬件环境(包括处理器,内存,I/O设备等),把物理硬件转换成用户所需的虚拟硬件。
本集群内的虚拟机,除了处理作为服务器角色的计算、网络与存储外,尚需要处理键盘鼠标显示器或触摸屏以及各类外设设备,同时具有故障迁移等功能。设计的主要规格可列表如下:
(1)支持客户机安装各系列Windows系统、Linux系统。
(2)支持客户机SMP计算,虚拟CPU可达32核。
(3)支持IntelVT-x或AMD-V虚拟化技术,提高性能。
(4)支持客户机挂载虚拟的IDE/SCSI/SATA磁盘存储。
(5)支持网络桥接虚拟化。
(6)支持客户机ACPI/APIC感知能力。
(7)具有客户机本地显示功能,不依赖远端显示。
(8)支持客户机多屏显示。
(9)虚拟机支持远端显示能力,不依赖客户机操作系统。
(10)支持3D硬件加速,提供客户机3D虚拟化加速能力。
(11)提供本机USB、显示等设备作为客户机虚拟设备。
(12)支持挂载远端物理设备,提供客户机串口、声卡等虚拟设备。
(13)支持直接挂载iSCSI磁盘。
(14)客户机支持网络PXE启动(Preboot Execution Environment)。
(15)支持客户机在线迁移。
(16)客户机心跳检测能力,可检测客户机操作系统宕机。
由于市场通用虚拟机软件无法完全满足这些需求,所以我们将选择开源的虚拟机软件定制开发。
2.4 故障迁移设计
对那些运行在Windows或Linux上的终端应用程序,很难仅迁移应用软件本身状态,使其在故障后继续运行。此处采用虚拟机迁移技术实现应用迁移。
虚拟机迁移技术,是指通过复制虚拟机数据(如虚拟机配置、磁盘存储或内存状态等),可以让一个虚拟机在不同的物理机上运行。(这里不涉及P2V或V2P的客户物理机迁移。)一般按迁移时机把其分为2类迁移。第1类迁移是离线迁移(或冷迁移、静态迁移、常规迁移),需要在虚拟机关闭或暂停的情况下执行,它将源物理(宿主)机上的虚拟机配置、磁盘文件等复制到目标物理机内,通过配置虚拟机可以重新运行。第2类迁移是在线迁移(或热迁移、动态迁移、实时迁移),可以在虚拟机正常运行的情况下执行,它需要源和目标物理机采用共享存储,以相同目录结构存放虚拟机,直接将源物理(宿主)机上的虚拟机运行环境以及内存实时同步到目标物理机,让虚拟机接着以前状态继续运行。第1类离线迁移无法满足高可用性需求。为了达到终端集群的高可用性,这里重点讨论第2类在线迁移。
目前开源的虚拟机软件如LinuxKVM或OracleVirtualBox等,在源和目标物理机都正常运行时执行在线迁移,从用户角度看虚拟机仅有毫秒(milliseconds)级别中断。
注:迁移成功后,源上客户机的内存、磁盘存储和网络连接等在目标物理机上保持不变,源物理机上的客户机关闭,目标物理机上的客户机继续运行。
但是此场景并非自动故障迁移所需要的。对于自动故障迁移,仅当源物理机(和其客户机操作系统)故障崩溃时,我们才需要目标物理机上的客户机操作系统继续运行。在源物理机正常时,目标物理机上客户机系统不应运行。
当集群系统启用自动故障迁移功能时,在源物理机正常运行时,目标物理机上的虚拟机处于热备状态,不实际运行。当源物理机崩溃后,目标物理机上立即接管客户機系统,恢复客户机系统的运行。在故障迁移后,原客户机系统所连接的外设如键盘鼠标显示器、串口、声卡等保持不变,继续可用。设计的主要规格可列表如下:
(1)虚拟机基于共享存储运行,支持在线迁移。
(2)客户机系统迁移到目标机后,原外设连接关系保持不变,外设继续可用。
(3)支持设定主备节点,配置热备关系。
(4)提供故障状态检测,支持自动迁移。
(5)磁盘存储支持文件锁定机制,避免同一个虚拟机同一时刻在不同主机运行。
(6)支持客户机内终端业务程序感知迁移事件。
(7)迁移时间满足一般终端业务程序中断的要求。
自动故障迁移,可在开源虚拟机软件的在线迁移或增量快照源码上修订。
2.4.1 热备时的内存复制机制
原在线迁移主要是内存复制。设迁移时网络复制速度为X*Byte/s(考虑压缩等),VM运行时内存速度Y*Byte/s,显然在时间t内如:∫t0x<∫t0y,则不可能在时间t内完整复制原VM运行内存。只有在时间t之后暂停VM使y=0,才可以复制。
原在线迁移流程无法满足热备不停机要求。我们改进流程,采用锁定并复制机制来实现,以新增内存代价降低热备影响,实现不连续热备。该锁定并复制说明如下:
(1)在时间t时刻点,设△M=∫t0y—∫t0x,虚拟机锁定△M内存。
(2)虚拟机在t时刻点之后,新的写内存操作如有涉及到△M内存,则触发trap,在物理机上分配新的内存。
此时理论上,源虚拟机不必暂停。
(3)迁移程序在t时刻点之后,继续复制△M内存到目标物理机上。这个复制预计可在t2=△M/x时间内完成。
(4)则目标物理机上在约t+t2时刻点完成复制,其VM内存是源虚拟机在t时刻点的完整镜像。
如果源虚拟机故障,则此时在目标物理机上,配合正确的运行环境如磁盘存储等,就可以恢复虚拟机在t时刻的运行状态,从t时刻点继续运行。
2.4.2 复制机制的性能分析原在线迁移实现,在t时刻源虚拟机要暂
停若干毫秒,直至t+t2时刻点才能继续运行,严重影响性能。
采用锁定并复制机制,理论上则在t→t+t2时间内,源虚拟机可以继续运行,因对更新锁定地址需要触发trap,性能比正常运行会有降低。
在采用锁定并复制机制实现热备时,应处理内存与磁盘存储的关系,保持一致性。2.4.3热备时的故障迁移流程
我们采用锁定并复制机制,说明热备时的故障迁移流程。
(1)(Startup)源虚拟机启动。同时执行热备初始化[1]:a)标记磁盘存储开始更新,b)分配VM内存、虚拟设备数据以及VM寄存器等影子缓冲区,c)预备复制VM内存(存为目标VM快照文件,或运行目标物理机服务端,复制源VM内存到目标机内存)。
(2)(Migrating)源虚拟机开始运行,读写内存,更新存储。在VM写存储时,采用ROW(Redirect On Write)机制更新(注1)。在VM写内存时,同时复制写数据到目标,并开始作热备倒计时。
(3)源虚拟机正常运行。同时存储采用ROW机制更新,VM运行时的刷新内存被复制传输到目标,继续热备倒计时。(Migrating)
(4)(Seprating)热备倒计时结束。此时,源虚拟机对未复制内存首次写动作采用COW(Copy On Write)机制(注2),保留最后时刻点源VM的寄存器、虚拟设备数据和运行内存等映像数据,标记对应时刻的存储快照。同时复制源VM最后时刻映像数据到目标。
(5)源虚拟机正常运行。源VM最后时刻映像数据完成复制,目标内具有了完整VM状态(及存储数据)。此时,源虚拟机关闭内存COW机制并更新内存索引。同时上次增量存储分片可合并到原磁盘存储。
(6)(Migrating)源虚拟机运行,预备下一轮热备。
如果源虚拟机故障(Collapsed),则此时在目标物理机上,加载上一次完整的VM虚拟机状态,匹配正确的存储快照,即可恢复虚拟机运行(Running)(注3)。
注1:ROW机制,Redirect On Write,在虚拟机处于热备状态时(Migrating或Setparing),其间磁盘存储更新作为分片快照保存。一个分片快照与正在热备复制的内存匹配。一个VM内存热备动作完成后,Migrating期间的快照可被合并到主存储,形成一个完整VM快照。如果源虚拟机在Migrating期间崩溃,则丢弃当时的存储更新分片快照,回滚到上一次匹配状态。这样来解决故障恢复时的内存与磁盘存储一致性问题。
注2:COW机制,Coyp On Write,在‘未复制内存被首次写更新时,其原有数据页将被复制到等待缓冲区,后续再复制到目标内,避免当VM内存刷新速度大于热备复制速度时的不收敛问题。
注3:此处把这种策略称为双机热备。我们可以选用另一种带优先级的负荷分担完成自动故障迁移。当集群系统采用负荷分担时,在源物理机正常运行时,目标物理机上的其它客户机也正常运行。当一个高优先级的客户机系统所处的物理机崩溃后,该客户机系统将被迁移到指定目标物理机上继续运行,而目标物理机上的原客户机将自动暂停。
2.5 软件定义外设
终端计算机在用户使用时,通常有键盘、鼠标、显示器或触摸屏,以及各类外设如COM串口、声卡或摄像头等设备。作为高可用终端集群,需要在自动故障迁移后,原有终端所接的外设保持可用。但是采用计算机线缆或PCB布线直接连接的外设,很难做到迁移。我们借鉴软件定义存储(Software DefinedStorage)模型,对计算机所连的外设进行网络化、虚拟化,使外设迁移易于实现。其中,网络服务层与物理声卡在同一接口板内,它具有2个功能:
(1)抽象定义原物理声卡功能与配置;
(2)在TCP/IP网络上发布服务。网络接口与网络服务交互,连接远端声卡设备给本机使用。
管理控制层作为集群管理服务端的一部分功能:
(1)控制设备应用模式;
(2)随集群策略故障迁移。虚拟声卡设备,则依据OS的设备规范,提供虚拟声卡给客户机操作系统。当故障发生时,虚拟机将自动在故障迁移的同时,把在用声卡外设随迁到目标机器,目标机器仍可以采用故障机器的声卡来播放与录音。
2.6 软件定义显示
考虑到绘图程序的使用以及DirectDraw与3D硬件加速的场景,显卡作为一种高负载、大流量的设备,我们需要特殊处理显卡设备。此处把显卡内置在本计算机,显卡外接显示器部分借鉴软件定义存储(Software Defined Storage)模型,在硬件架构中增加针对显示的交换控制层,对计算机所连接的显示器进行虚拟化,使故障时的显示迁移易于实现。
其中,DP交换控制层完成类似以太网交换机的功能,把一个DP制式数据封包交换到指定的显示器接口内。接口转换主要完成从DP到VGA/DVI/HDMI等显示格式数据转换,包括控制数据和显示器应答数据。3D硬件加速通过虚拟显卡转换完成。
这样在故障迁移时原虚拟显卡数据被随迁到目标物理上,可以保证源虚拟机正常运行。同时,管理控制层则下发指令给DP交换控制组件,本物理机显示数据将被交换到原故障机器显示器上。
软件定义显示类似于KVM切换器,与RDP远程桌面不同。RDP远程桌面需要2个计算机,显示性能受2个计算机限制,DirectDraw与3D硬件加速受限(仅Windows 7或以上版本支持RemoteFX)。
2.7 设备健康管理
高可用终端集群,基于IPMB、TCP/IP实现设备健康管理。
设计的主要规格可列表如下:
(1)設备硬件电压、温度检测,运行状态检测。
(2)宿主机系统CPU、内存、网络与进程状态等检测。
(3)集群的共享存储、软件定义外设等检测。
(4)虚拟机运行状态检测。
(5)热备迁移状态检测。当检测到异常数据时,系统自动记录并报警。
3 方案实现
基于此设计,我们实现了一个非完整方案的高可用终端集群。
我们采用自行开发硬件,完成了方案所述硬件环境。我们选择了Ubuntu Linux宿主操作系统+VirtualBox虚拟机实现了集群管理层,增加了各类虚拟设备包括软件定义串口、软件定义声卡、软件定义CAN口和软件定义显示,修复了客户机3D加速缺陷,重写了网络虚拟设备以支持万兆网,基本达到了实用程度,在各种场景下掉电测试可用性约为99%。
参考文献
[1]肖力.深度实践KVM[M].机械工业出版社,2015.
[2]《Windows DriveKit Help》,Microsoft Corporation,2009.
[3]《Oracle VM VirtualBox User Manual》,Oracle Corporation,2017.
[4]梅宏,郭耀.软件定义的时代,2017.
[5]《Software-Defined Networking: The new Norm for Networks》白皮书,Open Networking Foundation, 2012-4-13.