刘胜楠,汪诗林
(1.国防科学技术大学计算机学院,湖南 长沙 410073;2.国防科学技术大学信息化管理办公室,湖南 长沙 410073)
虚拟环境下Web服务动态负载均衡策略改进*
刘胜楠1,汪诗林2
(1.国防科学技术大学计算机学院,湖南 长沙 410073;2.国防科学技术大学信息化管理办公室,湖南 长沙 410073)
为了提高Web服务集群的伸缩性和自动化能力,从虚拟化和负载均衡两方面研究集群系统,对现有负载采集策略做了改进,设计并实现了一种可根据负载值自动控制集群规模的模型XCluster。新模型运行在Xen提供的虚拟化环境中,实时监视宿主机层和虚拟机层的负载状态,随着集群系统总负载的增长,逐渐引入新的虚拟机来扩大集群规模,同时将任务合理分配到各个虚拟机节点上;当总负载下降时,逐渐关闭虚拟机缩小集群规模,释放出来的硬件资源又可以提供给其他集群系统使用。理论分析和实验结果表明,XCluster只需占用很少的网络通信量完成信息收集和命令下达,能够充分利用虚拟机易于管理的优势完成后端节点的调度,并且在任务总量相同的情况下,使用尽可能少的集群节点来执行任务。
虚拟化;Web服务;动态负载均衡;自动化控制;集群;任务调度
在互联网高速发展的今天,各大网站为了应对高并发的用户访问通常以集群的方式来部署Web服务。其经典结构正如Google[1]的搜索引擎一样,由负责任务调度的前端节点和负责处理请求的后端节点组成。虚拟化技术出现以前,集群大多是固定规模,物理服务器与集群节点一一对应,物理服务器的数量越多,集群能够承受的负载越大。然而,由于影响网站访问量[2]的因素太多,集群规模又无法改变,于是要么在峰值到达时负载过重,响应缓慢,要么出现大量空闲节点。新一代的集群将节点转移到虚拟机上,不仅节约硬件投入,而且借助虚拟化层提供的接口,启动或关闭后端节点,可大大提高系统的伸缩性和自动控制能力。在虚拟化环境下,前端节点需要在两个层面[3]调度任务,一是虚拟机层,任务来自用户请求以及为了处理请求而产生的进程和子进程,负载体现在占用虚拟机CPU、内存以及网络资源上;二是宿主机层,任务来自虚拟化层针对虚拟机的操作,负载体现在虚拟机数量以及占用的硬件资源上。图1以Xen(一个由剑桥大学开发的虚拟机监视器)[4]为例,描述了在M台宿主机上部署N套Web服务集群的情形。
Figure 1 Schematic diagram of clusters deployed in Xen environment
从虚拟机层的角度看,大量并发的用户请求通过网络被前端节点分发到后端节点,客户操作系统Guest OS(Guest Operation System)将请求转换成计算/IO指令,在Domain0(一个特殊的Guest OS,具有调用硬件设备的最高权限)的调度下,分配硬件资源执行;从宿主机层的角度看,处于活动状态的后端节点的数量和位置随着用户访问量的变化而变化。但是,传统集群技术无法监控宿主机,也没有控制虚拟机的权限,因此仅能在虚拟机层实现负载均衡。
为了解决以上问题,本文在现有动态负载均衡技术的基础上,引入虚拟层提供的监控功能,结合WebService技术,将信息策略和转移策略独立出来,设计并实现了一种根据负载值自动控制集群规模的模型XCluster(Xen-Cluster),同时满足虚拟机层与宿主机层的负载均衡需求。
负载均衡策略根据考虑的侧重点不同,可以有多种分类方式。按调度方式有静态调度和、动态调度,按调度对象类型有基于任务的调度和基于资源的调度,按调度器的位置分有客户端层、服务器层、网络层。静态调度[5]算法主要有轮询法、加权法、先分组加权,再组内轮询的混合法等,这些算法不需要监控节点的实际负载,算法简单易于实现,但负载均衡效果不佳;动态调度[6]正好相反,根据Kameda H等人[7]的实验结果,动态调度的性能效果比静态调度要高30%~40%。基于任务的调度,将任务看做产生负载的根源,侧重于通过合理分发任务达到平衡系统的整体负载的目的;基于资源的调度,将计算资源看做可以再分配的对象,如虚拟机迁移技术[8],通过预拷贝和后续拷贝将虚拟机的运行状态完整、快速地从原重载宿主机平滑地迁移到目标轻载宿主机上。但是,它有一个限制,虚拟机上运行的Web服务必须能够兼容目标宿主机的配置,比如一个32位的虚拟机,再怎么迁移也无法使用超过4 GB的内存。调度器运行在服务器上是最常见的形式,属于服务器层调度;也有一些特殊的浏览器,如Netscope[9]直接从自己的服务器上下载最佳路由,属于在客户端层实现调度的方法;还有将调度器放入网络层甚至链路层设备[10]的,直接在网络层将用户请求地址替换成负载最低的服务器地址。
Figure 2 XCluster model
本文设计的XCluster需要控制多个Web集群,因此适合选择在服务器层基于任务的动态调度算法[6,7,11]。它有信息策略、转移策略、启动策略、选择策略、定位策略五个组成部分,集中式和分布式两种实现方式。在文献[6]设计的决策支持系统中,信息策略采用独立服务器集中收集,称为管理者,其他策略分散到各个节点,采用分布式调度。各节点通过WebService向管理者查询各节点负载表。WebService技术降低了集中式调度器的负载。文献[12]设计了一种门限策略来量化负载,不同Web服务占用资源的比例是不同的。门限策略可以根据实际情况设定每种负载指标的权重以及划分负载状态的阈值,为调度器提供量化手段。文献[13]设计了一种监控虚拟环境下分布式系统状态的框架,它由中央监视器和节点监视器组成,节点监视器借助Xen收集节点的实时数据,减少对虚拟机资源的占用,然后将整合后的数据发送给中央监视器分析。在信息策略中,节点监控是必不可少的,Xen的性能监视器在实时性上有所欠缺,而且也无法监控进程,所以每个节点上还是需要额外安装监视进程。各个节点监控数据的传输必然会增加集群的网络负载,收集的信息越详细,负载越重。文献[14]利用Xen的管理工具,根据负载状态修改虚拟机的配置,从而扩展或缩小集群的服务能力,实现简单而且有效,不过虚拟机上的应用程序必须能够兼容新的配置。
本文所设计的XCluster要实现两个目标:满足单个集群系统节点的动态扩展,在虚拟机层面实现负载均衡;多个集群系统的节点在有限的宿主机上合理分布,在宿主机层面实现负载均衡。图2展示了XCluster的整体结构,ClusterConfigurator是为集群管理员提供基本配置的应用程序,包括集群规模的规划、负载指标及权重等。前端节点由XenMonitor、ClusterScheduler、VMController三个独立功能的子系统组成,它们通过WebService进行通信。XenMonitor负责收集宿主机、虚拟机信息以及负载情况;ClusterScheduler接收用户请求,完成虚拟机层任务调度;VMController通过控制备用节点、活动节点的数量和位置完成宿主机层的负载均衡。后端节点上ImmortalWeb是集群的业务系统,为了方便测试,它被设计成制造虚拟机CPU、内存以及IO压力的Web应用程序;VmClientMonitor负责监控虚拟机以及ImmortalWeb实时状态,当发现异常时通过WebService向ClusterScheduler报告。
3.1 信息策略
在XCluster中,后端节点的状态由节点类型和量化负载值两部分组成。节点类型分为空节点BN(Blank Node)、备用节点SN(Standby Node)和活动节点AN(Active Node)三类。空节点是仅在虚拟化环境中才会出现的一种新型节点,它表示在一台宿主机上已规划但未部署虚拟机的节点;备用节点表示该虚拟机已经部署但处于停机状态,空节点和备用节点都没有负载;活动节点表示该虚拟机处于运行状态,并根据管理员设定的阈值分为适载节点OptN(Optinum-load Node)、重载节点HvN(Heavy-load Node)和满载节点FuN(Full-load Node)三类。活动节点、备用节点以及空节点的总和代表了集群的最大规模,活动节点代表集群的当前规模,备用节点和空节点代表集群剩余的扩展能力。量化负载值用于比较处于相同阈值区间活动节点之间的负载大小。本系统提供了CPU利用率、内存占用率、I/O利用率、磁盘利用率等常见的负载指标,并采用对负载指标加权求和的策略量化。权重由系统管理员根据集群系统的特点自行设置(下文中负载值均指量化后的负载值)。
本文不涉及对宿主机电源的控制,因此所有宿主机都是活动节点,其状态主要是指负载类型。由于各虚拟机之间具有良好的隔离性,相同阈值区间内宿主机负载值高或者低对虚拟机的影响都非常小,可忽略不计,所以只需要适载OptH(Optimum-load Host)和满载FuH(Full-load Host)两种即可。宿主机负载有两种不同表现,一种体现在部署虚拟机时,当宿主机的空闲块设备或空闲内存等不满足部署虚拟机条件时,视为满载,反之为适载;另一种体现在启动虚拟机时,当宿主机的CPU或空闲内存等不能满足启动虚拟机条件时,视为满载,反之为适载。
3.2 系统均衡性判定
集群系统从启动的那一刻起就在扩展、稳定和收缩三种状态之间转换。VMController通过分别统计各类后端节点的数量来判断集群系统是处于何种状态,只要不是稳定状态就会触发相应的操作让系统回到稳定状态。图3描述了这三种状态的转换过程,当系统启动时,所有节点都是空节点,系统处于扩展状态,VMController执行部署和启动虚拟机的操作增加活动节点数,直到适载节点数与重载节点数之和达到最小活动节点数MinAN(Minimum Number of Active Nodes),并且备用节点数达到最小备用节点数MinSN(Minimum Number of Standby Nodes)。接着,系统进入稳定状态。当适载节点数大于最大适载节点数MaxOptN(Maximum Number of Optinum-load Node),或者备用节点数大于最大备用节点数MaxSN(Maximum Number of Standby Nodes)时,系统进入收缩状态,VMController执行关闭或删除虚拟机的操作,减少活动节点和备用节点,使系统再次回到稳定状态。
Figure 3 State transition diagram of XCluster
3.3 转移策略与定位策略
宿主机层负载均衡的对象是虚拟机,有四种操作用于处理六种场景。四种操作分别是:将虚拟机部署到宿主机,使得空节点变为备用节点;删除备用节点,使之变为空节点;启动备用节点变为活动节点;关闭活动节点变为备用节点。六种场景如图4所示。场景1是当备用节点数小于MinSN,且存在有空节点的适载宿主机时,将虚拟机随机部署在一台适载宿主机上。MinSN的取值表示宿主机层集群的机动能力,值越大机动性越强,占用宿主机块设备资源也越多。部署的方式有两种,一种是将虚拟机镜像文件导入到宿主机上,另一种类似虚拟机迁移,通过copy on write技术复制同一虚拟化池(Virtualized Pool)中其他宿主机上的虚拟机实现。场景2是当备用节点数大于MaxSN时,随机删除一个备用节点,释放所在宿主机的块设备资源。MaxSN与MinSN的差表示宿主机层集群的敏感度,差值越小灵敏度越高,负载均衡活动越频繁。场景3是当备用节点数在MinSN与MaxSN之间时,如果最后一个被关闭的备用节点是在足够长的时间IdleTimeout(Idle Time Out)前关闭的,那么认为集群目前处于一个十分稳定的状态,可以将备用节点的数量逐步收敛到MinSN值。IdleTimeout值表示集群从稳定过渡到空闲的时长,该值越大则说明需要保持稳定状态的时间更长。场景4是当适载节点数与重载节点数之和小于MinAN时,从适载宿主机上随机启动一个备用节点上的虚拟机。该虚拟机负载会从0直接升至满载再逐渐降为重载,最后稳定在适载状态。MinAN表示集群稳定时的最小吞吐量(throughput),值越大最小吞吐量越大。场景5是当适载节点数大于MaxOptN时,通常是在集群负载下降的时候才会出现该情形,随机关闭一个收到关机信号的适载节点。MaxOptN用于调节关闭适载节点的速度,值越大速度越慢。场景6是假设管理员让MaxOptN的值大于MinAN的一种极端情况,当适载节点数超过MinAN且小于MaxOptN时,同样认为集群规模应当缩小,从而随机关闭一个适载节点。
图4 宿主机层转移策略和定位策略
虚拟机层负载均衡的对象是任务,任务的调度仅与活动节点中的适载节点与重载节点有关,而满载节点由于负载已经达到上限所以不再接收新的任务,备用节点和空节点都缺少处于运行状态的虚拟机,也不能接收任务。由于宿主机层的负载均衡能够保证在集群达到最大规模,即所有剩余空节点以及备用节点所在的宿主机都为满载宿主机,所有活动节点都为满载节点之前,总能找到可以转发任务的活动节点,因此虚拟机层的转移和定位策略的目标是在满足任务并发的需求的前提下使用尽可能少的活动节点。其核心体现在后端节点调度优先级队列PQ(Priority Queue of Back-End Nodes)上。该队列按节点类型分为三段,第一段的优先级最高,第二段次之,第三段最低。每一段都要按负载值排序,同一段内排名越靠前,优先级越高。第一段存储负载值最大的前MinAN个适载节点,负载值从大到小排序;第二段存储所有重载节点,负载值从小到大排序;第三段存储除去第一段后剩下的适载节点,负载值从大到小排序。PQ的长度LPQ(Length of PQ)受宿主机层负载均衡的影响而动态变化。在一次任务调度周期中,N个任务从任务队列Qt(Queue of Tasks)中取出,逐一转发至从PQ中选出的N个节点上。调度过程会出现两种情况,第一种情况是当N小于或等于LPQ时,按优先级从PQ逐一取出节点接收任务,直到所有任务调度完毕。优先级越高的节点,获得任务的概率越高,负载值增长得越快。经过实验证明,MinAN值设置得越大,系统抵抗访问量激增的能力就越强。第二种情况是当N大于LPQ时,采用轮询法,反复遍历PQ,直到所有任务调度完毕。若N远大于LPQ,队列中所有节点获得任务的概率趋于一致,负载值增长速度也几乎相同。
为了验证XCluster的性能,准备了两台拥有4核CPU、4 GB内存、千兆网络的物理机,上面安装Xen,版本为3.4。集群节点镜像文件ImmortalTestVm.xva,部署到宿主机后占用1VCPU、1 GB内存,且自动运行ImmortalWeb,对外提供三种Web服务:在内存中申请一段500 KB的空间,维持15 s后释放;计算100 000以内的质数个数;从外部接收500 KB的随机字符串,并存入本地,保存成功后删除文件。它们分别用于增加节点的内存、CPU以及IO的压力。我们用Nginx与XCluster做对比,前者是由Igor Sysoev开发的高性能HTTP和反向代理服务器,通过简单配置就能够将用户请求随机转发到后端节点。
图5和图6分别是Nginx和XCluster在压力测试下相同后端节点的量化负载曲线。两幅图的上半部分表示虚拟机的量化负载值随时间的变化曲线,下半部分表示宿主机的量化负载值随时间变化的曲线。横坐标表示时间,其中start标记的位置是开始压力测试的时间,stop标记的位置是停止压力测试的时间,end标记的位置是集群排空所有任务的时间。纵坐标表示量化负载值,由于宿主机的网络负载和块设备读写负载对集群影响非常小,不计入负载值,所以宿主机的量化负载值要比虚拟机的小。
Figure 5 Back-end nodes’ load curves using Nginx
Figure 6 Back-end nodes’ load curves using XCluster
由于Nginx没有控制虚拟机的权限,故测试之前所有节点都必须处于运行状态。在图5中,从①、②处可以看出,当外部压力不大时,负载变化非常小,若增大到一定程度时,四个节点的负载值几乎是一同飞快地上涨。这是因为Nginx是随机转发请求的,当请求很多时,每个节点获得任务的概率就趋于一致了。到了③处,1号节点因达到连接上限拒绝接受请求,从而被Nginx排除在转发列表之外,之后不久另外三个节点接连故障,服务中断。在④处,四个节点上的任务都已完成,负载降至最低。到⑤处,Nginx再次做连接测试,将它们重新加入到转发列表中,服务恢复正常。
在图6中,0至start是集群系统的启动阶段,ClusterScheduler在2号宿主机上启动4号备用节点,并在一个空节点处导入虚拟机作为新的备用节点(即2号节点),同时初始化XenMonitor,这些事件使得①处出现极大值。start至stop是压力测试阶段,在②处,测试压力使得4号节点从适载节点变为重载节点,ClusterScheduler启动2号节点,部署新的备用节点(1号节点)。另外,虚拟机在启动时,网络负载不稳定,因此量化负载值上下跳动且范围很大。这段时间新启动的虚拟机不能分担压力,所以4号节点的负载仍然增长了一小段。在③处,2号节点达到适载状态,分担了大量任务,4号节点接着也回到适载状态,与2号节点交替接收任务,所以在随后的一段时间里它们负载增幅相似。随着活动节点数量的增加,测试程序并发的请求数也相应增加,于是2号、4号节点再次变为重载。在④处,ClusterScheduler启动1号节点,部署最后一个备用节点(3号节点),因此宿主机负载值在这里出现拐点。stop至end是任务排空阶段,在⑤处可以看到,所有节点的负载值都出现了下降的趋势。在⑥处,2号节点第一个排空任务,释放内存,宿主机负载值也出现相应的跳跃。在end处,ClusterScheduler依次关闭了负载较低的2、3、1号节点,只留下4号作为活动节点。
对比两次实验结果,XCluster可通过补充备用节点和活动节点扩展集群以适应负载的增长。当负载变轻时,又通过关闭空闲节点和删除备用节点缩小集群释放资源;Nginx从始至终都是固定的四个节点。XCluster通过监听虚拟机和宿主机的负载状态,在适当的时机扩展或缩小集群,选择合适的节点转发请求,确保在保证服务不中断的前提下,整体负载最小;而Nginx只是采用随机转发的方式,所以负载值要么长时间没有变化,要么大起大落。当然,XCluster扩展集群是需要过渡时间的,如果负载增长过快,也会出现服务中断的现象,只能通过增加MinAN值解决,当MinAN值等于后端节点数时,就和Nginx一样失去扩展和收缩能力了。
负载均衡本是分布式计算机系统研究方向的一个关键和经典的问题,而虚拟化技术的出现改变了人们的传统观念,重新从虚拟机层和宿主机层两个不同的角度去看待这一问题。本文设计的XCluster系统以Xen为虚拟化平台,利用其对虚拟机管理的灵活性,根据负载值自动控制集群规模从而实现负载均衡。实验表明,系统能够根据负载状态,在宿主机层控制备用节点的数量;在虚拟机层控制适载节点的数量,使得它们刚好满足需要。
[1] Barroso L A,Dean J,Holzle U.Web search for a planet:The Google cluster architecture[J]. Micro, IEEE, 2003, 23(2):22-28.
[2] Hadavandi E, Shavandi H, Ghanbari A, et al.Developing a hybrid artificial intelligence model for outpatient visits forecasting in hospitals[J]. Applied Soft Computing, 2012, 12(2):700-711.
[3] Zhao Chun-yan.Research and implementation of job scheduling algorithm in cloud computing[D].Beijing:Beijing Jiaotong University,2009.(in Chinese)
[4] Barham P, Dragovic B, Fraser K, et al. Xen and the art of virtualization[C]∥Proc of the 19th ACM Symposium on Operating Systems Principles (SOSP’03), 2003:164-177.
[5] Zhang Cong-ping,Yin Jian-wei. Dynamic load balancing algorithm of distributed file system [J]. Journal of Chinese Computer Systems,2011,32(7):1424-1426.(in Chinese)
[6] Liu Han-ling.Research and implementation of dynamic load balancing strategy in distributed system based on web service[D]. Harbin:Harbin Engineering University,2010.(in Chinese)
[7] Kameda H, Fathy S, Ryu I, et al.A performance comparison of dynamic vs.static load balancing policies in a mainframe-personal computer network model[C]∥Proc of IEEE CDC2000, 2000:1415-1420.
[8] Zhang Bin-bin, Luo Ying-wei, Wang Xiao-lin, et al.Whole-system live migration mechanism for virtual machines[J]. Acta Electronica Sinica, 2009,37(4):894-899.(in Chinese)
[9] Mosedole W D,McCool F R. Lessons learned administering netscope’s internet site[J].IEEE Internet Computing,1997,1(2):28-35.
[10] Bryhni H, Klovning E, Kure O.A comparison of load balancing techniques for scalable web servers[J].IEEE Network,2000,14(4):58-64.
[11] Kunz T.The influence of different workload descriptions on a heuristic load balancing scheme[J].IEEE Transactions on Software Engineering,1991, 17(7):725-730.
[12] Lin F C H, Keller R M.The gradient model load balancing method[J].IEEE Transactions on Software Engineering,1987, 13(1):32-38.
[13] Mehrotra R,Dubey A,Abdelwahed S,et al.Large scale monitoring and online analysis in a distributed virtualized environment[C]∥Proc of IEEE International Conference and Workshops on Engineering of Autonomic and Autonomous Systems (EASe),2011:1-9.
[14] Monteiro A F,Azevedo M V,Sztajnberg A.Virtualized web server cluster self-configuration to optimize resource and power use[J].Journal of Systems and Software,2013,86(11):2779-2796.
附中文参考文献:
[3] 赵春燕.云环境下作业调度算法研究与实现[D].北京:北京交通大学,2009.
[5] 张聪萍,尹建伟.分布式文件系统的动态负载均衡算法[J]. 小型微型计算机系统,2011,32(7):1424-1426.
[6] 刘汉玲.基于WebService的分布式系统中动态负载均衡策略的研究与实现[D]. 哈尔滨:哈尔滨工程大学,2010.
[8] 张彬彬,罗英伟,汪小林,等.虚拟机全系统在线迁移[J].电子学报,2009,37(4):894-899.
刘胜楠(1981-),男,湖南长沙人,硕士生,研究方向为云计算。E-mail:nanjixing@126.com
LIU Sheng-nan,born in 1981,MS candidate,his research interest includes cloud computing.
Improved dynamic load-balancing strategy of web servers in virtual environment
LIU Sheng-nan1,WANG Shi-lin2
(1.College of Computer,National University of Defense Technology,Changsha 410073;2.Informatization Office,National University of Defense Technology,Changsha 410073,China)
In order to improve the scalability and automation of web cluster servers, we study many cluster systems from the aspects of virtualization and load balancing, propose a load information collection algorithm based on the Xen server virtualization platform, design and implement a modeling system called XCluster which can automatically control the cluster scale according to the load status. A monitoring service in the new model collects and quantifies the loads of the hosts and active nodes in real time. VM controllers will be notified to deploy more VMs from an optimum-load host when light-load nodes are in short supply; however, when there are too many light-load nodes, a number of VMs will be shutdown to release more hardware resources. Theoretical analysis and experimental results show that the XCluster can make full use of the unique capabilities of the virtualization platform which can manage all back-end nodes in an economical way. By scheduling VMs, the clusters can avoid resource waste, yet maintaining the application’s quality of service within an acceptable size.
virtualization;web server;dynamic load-balancing;automation control;cluster;task scheduling
1007-130X(2015)09-1607-07
2014-09-15;
2014-11-11
TP393.027
A
10.3969/j.issn.1007-130X.2015.09.001
通信地址:410073 湖南省长沙市国防科学技术大学信息中心总体部
Address:Information Center,National University of Defense Technology,Changsha 410073,Hunan,P.R.China