转Linux集群服务器系统(1)

本文介绍了linux服务器集群系统――lvs(linux virtual server)项目的产生背景和目标,并描述了lvs服务器集群框架及目前提供的软件,列举lvs集群系统的特点和一些实际应用,最后,本文谈论了lvs项目的开发进展和开发感触。

1. 背景

当今计算机技术已进入以网络为中心的计算时期。由于客户/服务器模型的简单性、易管理性和易维护性,客户/服务器计算模式在网上被大量采用。在九十年代中期,万维网(world wide web)的出现以其简单操作方式将图文并茂的网上信息带给普通大众,web也正在从一种内容发送机制成为一种服务平台,大量的服务和应用(如新闻服务、网上银行、电子商务等)都是围绕着web进行。这促进internet用户剧烈增长和internet流量爆炸式地增长,图1显示了1995至2000年与 internet连接主机数的变化情况[1],可见增长趋势较以往更迅猛。

 

图1:1995至2000年internet主机数的变化

internet的飞速发展给网络带宽和服务器带来巨大的挑战。从网络技术的发展来看,网络带宽的增长远高于处理器速度和内存访问速度的增长,如 100m ethernet、atm、gigabit ethernet等不断地涌现,10gigabit ethernet即将就绪,在主干网上密集波分复用(dwdm)将成为宽带ip的主流技术[2,3],lucent已经推出在一根光纤跑 800gigabit的wavestar? ols 800g产品[4]。所以,我们深信越来越多的瓶颈会出现在服务器端。很多研究显示gigabit ethernet在服务器上很难使得其吞吐率达到1gb/s的原因是协议栈(tcp/ip)和操作系统的低效,以及处理器的低效,这需要对协议的处理方法、操作系统的调度和io的处理作更深入的研究。在高速网络上,重新设计单台服务器上的网络服务程序也是个重要课题。

比较热门的站点会吸引前所未有的访问流量,例如根据yahoo的新闻发布,yahoo已经每天发送6.25亿页面[5]。一些网络服务也收到巨额的流量,如 american online的web cache系统每天处理50.2亿个用户访问web的请求,每个请求的平均响应长度为5.5kbytes。与此同时,很多网络服务因为访问次数爆炸式地增长而不堪重负,不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量。如何建立可伸缩的网络服务来满足不断增长的负载需求已成为迫在眉睫的问题。

大部分网站都需要提供每天24小时、每星期7天的服务,对电子商务等网站尤为突出,任何服务中断和关键性的数据丢失都会造成直接的商业损失。例如,根据dell的新闻发布[6],dell现在每天在网站上的交易收入为一千四百万美元,一个小时的服务中断都会造成平均五十八万美元的损失。所以,这对网络服务的可靠性提出了越来越高的要求。

现在web服务中越来越多地使用cgi、动态主页等cpu密集型应用,这对服务器的性能有较高要求。未来的网络服务会提供更丰富的内容、更好的交互性、更高的安全性等,需要服务器具有更强的cpu和i/o处理能力。例如,通过https(secure http)取一个静态页面需要的处理性能比通过http的高一个数量级,https正在被电子商务站点广为使用。所以,网络流量并不能说明全部问题,要考虑到应用本身的发展也需要越来越强的处理性能。

因此,对用硬件和软件方法实现高可伸缩、高可用网络服务的需求不断增长,这种需求可以归结以下几点:

可伸缩性(scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。

高可用性(availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。

可管理性(manageability),整个系统可能在物理上很大,但应该容易管理。

价格有效性(cost-effectiveness),整个系统实现是经济的、易支付的。

2. 服务器集群系统

对称多处理(symmetric multi-processor,简称smp)是由多个对称的处理器、和通过总线共享的内存和i/o部件所组成的计算机系统。smp是一种低并行度的结构,是我们通常所说的"紧耦合多处理系统",它的可扩展能力有限,但smp的优点是单一系统映像(single system image),有共享的内存和i/o,易编程。

由于smp的可扩展能力有限,smp服务器显然不能满足高可伸缩、高可用网络服务中的负载处理能力不断增长需求。随着负载不断增长,会导致服务器不断地升级。这种服务器升级有下列不足:一是升级过程繁琐,机器切换会使服务暂时中断,并造成原有计算资源的浪费;二是越往高端的服务器,所花费的代价越大;三是smp服务器是单一故障点(single point of failure),一旦该服务器或应用软件失效,会导致整个服务的中断。

通过高性能网络或局域网互联的服务器集群正成为实现高可伸缩的、高可用网络服务的有效结构。这种松耦合结构的服务器集群系统有下列优点:

性能

网络服务的工作负载通常是大量相互独立的任务,通过一组服务器分而治之,可以获得很高的整体性能。

性能/价格比

组成集群系统的pc服务器或risc服务器和标准网络设备因为大规模生产降低成本,价格低,具有最高的性能/价格比。若整体性能随着结点数的增长而接近线性增加,该系统的性能/价格比接近于pc服务器。所以,这种松耦合结构比紧耦合的多处理器系统具有更好的性能/价格比。

可伸缩性

集群系统中的结点数目可以增长到几千个,乃至上万个,其伸缩性远超过单台超级计算机。

高可用性

在硬件和软件上都有冗余,通过检测软硬件的故障,将故障屏蔽,由存活结点提供服务,可实现高可用性。

当然,用服务器集群系统实现可伸缩网络服务也存在很多挑战性的工作:

透明性(transparency)

如何高效地使得由多个独立计算机组成的松藕合的集群系统构成一个虚拟服务器;客户端应用程序与集群系统交互时,就像与一台高性能、高可用的服务器交互一样,客户端无须作任何修改。部分服务器的切入和切出不会中断服务,这对用户也是透明的。

性能(performance)

性能要接近线性加速,这需要设计很好的软硬件的体系结构,消除系统可能存在的瓶颈。将负载较均衡地调度到各台服务器上。

高可用性(availability)

需要设计和实现很好的系统资源和故障的监测和处理系统。当发现一个模块失败时,要这模块上提供的服务迁移到其他模块上。在理想状况下,这种迁移是即时的、自动的。

可管理性(manageability)

要使集群系统变得易管理,就像管理一个单一映像系统一样。在理想状况下,软硬件模块的插入能做到即插即用(plug & play)。

可编程性(programmability)

在集群系统上,容易开发应用程序。

3. linux virtual server项目

针对高可伸缩、高可用网络服务的需求,我们给出了基于ip层和基于内容请求分发的负载平衡调度解决方法,并在linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。

虚拟服务器的体系结构如图2所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(load balancer)。负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在linux内核中实现的,我们称之为linux虚拟服务器(linux virtual server)。

 

图2:虚拟服务器的结构

在1998年5月,我成立了linux virtual server的自由软件项目,进行linux服务器集群的开发工作。同时,linux virtual server项目是国内最早出现的自由软件项目之一。

linux virtual server项目的目标:使用集群技术和linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(scalability)、可靠性(reliability)和可管理性(manageability)。

目前,lvs项目已提供了一个实现可伸缩网络服务的linux virtual server框架,如图3所示。在lvs框架中,提供了含有三种ip负载均衡技术的ip虚拟服务器软件ipvs、基于内容请求分发的内核layer-7交换机ktcpvs和集群管理软件。可以利用lvs框架实现高可伸缩的、高可用的web、cache、mail和media等网络服务;在此基础上,可以开发支持庞大用户数的、高可伸缩的、高可用的电子商务应用。

图3:linux虚拟服务器框架

randomness