The paper first presents a high availability system architecture based on open source operating system CentOS 5.5 and open source virtualization software KVM, and then explains its working mechanism and implementation method. Finally, it provides a brief introduction to the application in Shenzhen University Library.
虚拟化技术在服务器架构中的应用,能够实现服务器整合,为应用系统提供独立、高效和灵活的运行环境,同时节约资源、方便管理。而虚拟服务器必须具备高可用性(High Availability,HA),才能构成稳定持续的基础平台。在采用商业虚拟化软件时,软件商通常提供专有的高可用性解决方案,但成本昂贵且具有局限性。本文将首先简介常见的高可用方案,然后提出一个在开源虚拟化软件基础上实现的高可用服务器架构并给出应用案例。
计算机系统的高可用性是指在服务器或系统发生故障时,应用系统不间断或短暂间断服务。最常见的高可用解决方案是采用服务器集群技术。
建立服务器集群至少需要两台服务器。一台做活动节点,提供应用服务;另一台做备用节点,定时侦测活动节点。当活动节点发生故障时,备用节点能接管原活动节点上的应用,自动转换为活动节点。如果原活动节点连接有共享存储设备,该存储应能随集群进行切换。
在非虚拟化系统中,要对某个计算机应用实施高可用性,需在每台节点服务器分别安装同一种应用,然后将所有节点组成一台集群服务器。图书馆应用系统种类繁多,不同应用对服务器的配置要求差异较大,如果每个应用都占用两台以上服务器,将造成服务器资源的浪费;如果仅对关键应用实施高可用性,则非关键应用将始终存在单点故障风险。
商业虚拟化软件如VMware、Hyper-V等,通常是以虚拟机的自动实时迁移来保证虚拟机高可用,即当某一台物理服务器由于故障或维护原因导致服务中断后,其虚拟机自动切换到其他运算资源消耗较小的物理服务器上,从而保持业务的连续性。当虚拟机本身出现网络异常、虚拟机系统资源不足等故障时,虚拟机就无法实现自动迁移,高可用性不能实现。
本文提出的在虚拟化环境下的高可用解决方案,能够保证物理机、虚拟机、应用系统三个层面的持续服务,并通过存储共享保障数据安全。
KVM (Kernel-based Virtual Machine)[ 1, 2] 是Linux[ 3] 下X86 硬件平台上的全虚拟化解决方案。它充分利用Linux Kernel已有的特性,如新硬件的支持、内存的管理、资源的调度等,实现虚拟化功能,如虚拟机在线迁移、界面管理、存储共享等,可以对虚拟机的CPU、内存等进行在线扩容,具有功能强大且丰富的命令行管理方式。其最大的优点是部署的灵活性,可以最大程度地适应现有架构,或完全构建一套适合特定需求的全新架构(KVM虚拟机安装、管理方法以及注意事项请参阅文献 [4])。
图1给出了虚拟机HA框架的示意图,实现该框架需满足以下要求:
(1) 需要两台物理服务器(PM)。
(2) 每台物理服务器都安装好KVM虚拟化系统。
(3) 每台物理服务器需要两块ISCSI HBA网卡,一块用作应用服务网桥接口,另一块将两台服务器相连用作虚拟机的心跳网桥接口。
(4) 物理服务器必须连接到同一个共享存储设备(LUN)。
(5) 选择用作高可用集群的两台虚拟机(VM)必须位于不同的物理服务器(PM)。
3.3 KVM虚拟机的HA实现
对于不同类型的操作系统和不同类型的存储区域网络(Storage Area Network,SAN)存储,HA的实现方法也不相同,具体如下:
对于Windows操作系统,需在虚拟机上安装Windows Server自带的微软集群系统MSCS软件(安装方法可参考微软官方文档,在此不详细介绍),再结合相应的脚本实现虚拟机的HA。
对于Linux操作系统也需先安装集群软件,实现方法因所使用的集群软件Heartbeat的不同而略有差别。
SAN存储设备有IP-SAN和FC-SAN两种类型,以Windows虚拟机为例,基于不同类型SAN存储的HA实现方法分别为:
(1) IP-SAN共享存储
如图2所示,备用虚拟机VM(B)的集群软件MSCS监测活动虚拟机VM(A),当VM(A)服务中断或发生故障时,VM(B)执行以下步骤:
①VM(B)通过SSH或Telnet远程连接到PM(B),再通过PM(B)连接到PM(A) 执行PM(A)上的脚本。
②PM(A)执行脚本命令,先将VM(A)强制关机,再重新启动。
③VM(B)通过MSCS接管存储并启动服务。
切换完成后,VM(B)成为活动节点,重启后的VM(A)成为VM(B)的热备。这样,集群所有节点都处于正常状态,完成了无人干预的循环接管,实现了虚拟机系统的高可用。
当VM(A)宿主机PM(A)发生故障时,VM(B)虽然无法通过PM(B)与PA(A)通信,重启PM(A)上的虚拟机,仍然可以执行第③步,通过MSCS接管存储,转成活动节点,保证了物理服务器的高可用性,如图3所示:
(2) FC-SAN共享存储
目前,KVM尚未支持主机总线适配器(Host Bus Adapter,HBA)卡的虚拟化,所以虚拟机无法通过HBA卡和存储进行数据交换。为了实现数据盘的共享,采用Shell脚本和物理服务器结合的方式来实现。
如图4所示,备用虚拟机VM(B)的集群软件MSCS监测活动虚拟机VM(A),当VM(A)中断服务或故障时, VM(B)执行以下步骤:
①VM(B)通过SSH或Telnet等远程连接到PM(B),再通过PM(B)连接到PM(A),执行PM(A)上的脚本。
②PM(A)执行脚本命令,强制关闭VM(A);通过Libvirt[ 5]将存储设备(FC-SAN)与VM(A)分离,防止数据丢失;重新启动VM(A)。
③VM(B)通过宿主机PM(B)给自己附加存储,调用集群系统MSCS启动相关服务。
切换完成后,VM(B)成为活动节点,重启后的VM(A)成为VM(B)的热备。这样,集群所有节点都处于正常状态,完成了无人干预的循环接管,实现了虚拟机系统的高可用。
当VM(A)宿主机PM(A)发生故障时,VM(B)虽然无法通过PM(B)与PA(A)联系,重启PM(A)上的虚拟机,仍然可以通过宿主机PM(B)给自己附加存储,再通过MSCS接管服务,转成活动节点,保证了物理服务器的高可用性,如图5所示:
本系统中,SCSI设备的在线附加与分离通过Virtio[ 6]软件实现。Virtio是针对 Linux 的 I/O 虚拟化框架,是半虚拟Hypervisor 中位于设备之上的抽象层。通过Virtio同时提高了磁盘I/O和网络的性能,详细介绍参阅文献[6]。
从两种不同存储环境下的虚拟机HA实现方法可以看出,PM(A)和PM(B)之间的通信是关键,为避免网卡的单点故障,可以通过双网卡绑定的方式实现,选择绑定的网卡根据实际环境而定。
HA系统建好后,可以分别从虚拟机和物理服务器两个层次进行测试,验证HA的效果,如表1所示:
![]() | 表1 HA测试方法 |
本文根据以上模拟动作实例,以两台Windows虚拟机组成的HA逐步进行测试,所有测试结果均符合预期效果。
总结以上测试结果:
(1)实现了从物理服务器到虚拟机的高可用。
(2)实现了应用服务的高可用。
(3)解决了HBA卡共享问题。
(4)活动节点发生故障后,HA系统自动恢复。
深圳大学图书馆虚拟化应用拓扑图如图6所示。
其中,DMZ区由2台IBM X3950物理服务器组成,采用双FC链路,通过光纤交换机BROCADE 200E与HUAWEI S5600存储系统(支持IP-SAN,通过电口交换机HUAWEI S5600连接存储)相连接,对校内外提供服务。TRUST区也由2台IBM X3950物理服务器组成,采用双FC链路,通过光纤交换机BROCADE 200E与IBM DS4800存储系统相连接,提供数据库服务和内部应用。单台IBM X3950配置为8*4核CPU、256GB内存、4块千兆以太网卡、2块8GB HBA卡。
表2为深圳大学图书馆DMZ区中的DMZ1物理服务器的虚拟机构成,以及与DMZ2物理服务器中虚拟机的对应关系。
![]() | 表2 DMZ区(DMZ1)虚拟机构成表 |
DMZ1中目前运行有Windows和Linux操作系统虚拟机共21台,其中10台虚拟机为主节点(活动节点),6台虚拟机为DMZ2中的备用节点,另有5台独立应用。
全部虚拟机总共占用物理内存76GB,物理服务器剩余180GB内存。物理服务器的CPU使用率平常在3%左右,访问高峰期达到12%左右,系统仍有很大的扩充余量。
为保证CPU和内存的有效利用,实际应用中可根据每个虚拟机的业务访问情况灵活配置、随时调整。
该HA系统于2010年11月正式上线运行,到目前为止运行效果良好,系统稳定、安全、可靠,服务器端的维护工作量大大降低。
在实际应用中此虚拟化HA架构系统的特点如下:
(1)软件零购置成本。
(2)实现了物理服务器和虚拟机的有效结合。
(3)脚本的使用。
(4)磁盘的在线添加、删除(关键因素)。
(5)Virtio半虚拟化驱动的应用。
(6)硬件资源的充分利用。
(7)自动恢复,循环接管。
本架构是利用开源软件的开放性和灵活性部署的一套能够适应不同版本Linux或Windows操作系统的虚拟化HA服务器系统架构。其物理服务器使用CentOS[ 7] 5.5操作系统,采用Linux内核虚拟机KVM, 分别结合Heartbeat和MSCS 集群软件实现Linux和Windows服务器的高可用性。同时,本架构的原理也可以采用第三方HA软件或自编脚本来实现,具体方案因需求而定。
这种虚拟化环境下的HA架构,利用物理服务器和虚拟机的相互结合实现了无人干预的循环接管,实现了从物理层到虚拟层、应用层的高可用性,虚拟机集群在性能上,包括网络、I/O等方面也基本接近物理服务器的性能。但是,此方案需要物理服务器资源尤其是内存资源的部分冗余,在虚拟化和资源调配上, 集成的可视化工具相对较少。
基于Linux+KVM的虚拟化高可用架构是一种高性能、低成本、可扩展的解决方案,它将大幅降低图书馆IT基础设施的建设和使用门槛。同时,它也是实现云计算的重要基础,结合相应的云平台软件,将可以提供私有云服务。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|