• 2006-04-03

    负载均衡技术综述

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://skyhorse.blogbus.com/logs/2185231.html

    负载均衡技术综述

    2005-3

    摘要:

    负载均衡建立在现有网络结构之上,它提供了一种有效的方法,用于扩展服务器带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。本文介绍了负载均衡技术的分类概况以及原理介绍,并详细阐述了第4层交换及其调度算法,通过HTTP URL解析和FTP主动模式、被动模式下的负载均衡介绍了第7层交换技术,并给出了负载均衡解决应用的案例。

    关键词: 负载均衡 集群 4层交换 7层交换

     

    Load Balance Techniques

     

     LI Jun

    ( Department of Computer Science and Technology, Tshinghua University, Beijing 100084, China)

    Email: l-jun04@mails.tsinghua.edu.cn

    Abstract: Load balancing leverages the existing networks. Hence is a effective approach for increased throughput and extended server bandwidth , for enhanced network data processing capability , and for further network flexibility and availability. This thesis presents briefly a load balancing theory , components. then use HTTP URL parse and FTP to illustrate content switching that relies on application Layer 7 technology. On top of all these it proposes the general suggestion of how to utilize load balance techniques in real scenario.

    Keywords: load balance; cluster; layer 4 switch;layer 7 switch

    1.   引言

    Internet的快速增长使提供网络服务的服务器的负载急剧增加,面对的访问者数量快速增加,网络服务器需要具备提供大量并发访问服务的能力。而对于单独的服务器而言,CPUI/O处理能力很快会成为瓶颈。简单的提高硬件性能并不能真正解决这个问题,因为单台服务器的性能总是有限的。必须采用多台服务器提供网络服务,并将网络请求分配给这些服务器分担,才能提供处理大量并发服务的能力。负载均衡(load balance)技术在这其中起到了关键的作用。

    负载均衡的基本思路是多台服务器为对称方式,每台服务器都具备等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。然后通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器都独立回应客户机的请求。服务器内容的一致性一般靠共享存储,同步更新或者是数据库。多台服务器构成了一个所谓的集群(Cluster)

    现在业内流行的负载均衡器产品包括软件和硬件.软件以章文嵩博士的开源项目Linux Virtual Server(Lvs)为代表,而硬件产品的代表则有Nortel Networks公司(Alteon WebSystems)生产的 Alteon交换机,Cisco System公司生产的 Local Director交换机,F5 Networks公司生产的 F5交换机等。

     

     

    2.   负载均衡技术的概况与分类

    负载均衡是一种策略,它能让多台服务器或多条链路共同承担一些繁重的计算或I/ O

    ,从而以较低成本消除网络瓶颈,提高网络的灵活性和可靠性。

    负载均衡的实现方式有多种,包括基于DNS,基于客户端的,基于应用服务器和基于协议层的多种实现方式。

    其中使用负载均衡器(load balancer)实现的基于协议层交换的负载均衡技术,包括第4层,第7层交换等。这种方式将负载均衡层与网络服务层分开,具有较高的可伸缩性和高可用性等特点,对于服务器和客户端而言透明,基本上无须做特别的修改。由于这样的特点,所以是最为流行也是广泛使用的技术。

     

    2.1基于DNS的解决方法

    最早的负载均衡技术是通过DNS服务中的随机名字解析来实现的,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,他们也就访问不同地址上的Web服务器,从而达到负载均衡的目的。

    DNS负载均衡的优点是简单、易行,并且服务器可以位于互联网的任意位置上,然而它也存在不少缺点,一个缺点是为了保证DNS数据及时更新,一般都要将DNS的刷新时间设置的较小,但太小就会造成太大的额外网络流量,并且更改了DNS数据之后也不能立即生效;第二点是DNS负载均衡无法得知服务器之间的差异,它不能做到为性能较好的服务器多分配请求,也不能了解到服务器的当前状态,甚至会出现客户请求集中在某一台服务器上的偶然情况。

    DNS方法实现的是基于Round-Robin轮循的算法,它实现了一种粗粒度的负载均衡。

     

    2.2基于客户端的解决方法

    这种模式指的是在网络的客户端运行特定的程序,该程序通过某种手段得到所有服务器的信息,再根据某种选择策略,找到可以提供服务的最佳服务器,将本地的应用请求发向它。如果负载信息采集程序发现服务器失效,则找到其他可替代的服务器作为服务选择。整个过程对于应用程序来说是完全透明的,所有的工作都在运行时处理。因此这也是一种动态的负载均衡技术。

    但这种技术存在通用性的问题。因为每一个客户端都要安装这个特殊的程序;并且,为了保证应用层的透明运行,需要针对每一个应用程序加以修改,通过动态链接库或者嵌入的方法,将客户端的访问请求能够先经过采集程序再发往服务器,以重定向的过程进行。对于每一个应用几乎要对代码进行重新开发,工作量比较大。

    所以,这种技术仅在特殊的应用场合才使用到,比如在执行某些专有任务的时候,比较需要分布式的计算能力,对应用的开发没有太多要求。例如Oracle的客户端的配置文件Tnsname.ora中就可以对同一个数据库实例名写多个ip地址。当第一个地址访问不到时,客户端就会主动访问addresslist中的下一个ip地址。

     

    2.3基于应用服务器的特定解决方法

    如果将客户端的负载均衡层移植到某一个中间平台,形成三层结构,则客户端应用可以不需要做特殊的修改,透明的通过中间层应用服务器将请求均衡到相应的服务结点。比较常见的实现手段就是反向代理技术。所谓的反向代理与一般的代理相反,不是部署在靠近客户端的位置,而是靠近被访问的服务器的位置。

    使用反向代理服务器,可以将请求均匀转发给多台服务器,或者直接将缓存的数据返回客户端,这样的加速模式在一定程度上可以提升静态网页的访问速度,从而达到负载均衡的目的。使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能。然而它本身也存在一些问题,首先就是必须为每一种服务都专门开发一个反向代理服务器。

    反向代理服务器针对每一次代理,就必须维护两个连接,一个对外的连接,一个对内的连接,因此对于特别高的连接请求,代理服务器的负载也就非常之大。反向代理能够执行针对应用协议而优化的负载均衡策略,每次仅访问最空闲的内部服务器来提供服务。但是随着并发连接数量的增加,代理服务器本身的负载也变得非常大,最后反向代理服务器本身会成为服务的瓶颈。例如,使用Apachemod_rproxy模块来实现负载均衡功能时,提供的并发连接数量受Apache本身的并发连接数量的限制。

    2.4基于使用负载均衡器的协议层的解决方法

    与以上的方法相比,使用负载均衡器的协议层的解决方法实现了精细粒度的负载均衡。

    在这种体系结构中,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端是负载均衡器。负载均衡器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检测节点或服务进程故障和正确地重置系统达到高可用性。整个集群具有单一的虚拟IP地址(VIP)。使集群中的服务器对客户端具有透明性。

    均衡器通常称为OSI参考模型第4层的切换装置,因为在传输数据包时,它们除采用IP层的信息外,还采用了传输层(OSI参考模型第4)的信息。

    Schroeder等人对Web服务器集群技术进行了综述[2],他们根据负载分配策略的细节将其分为以下三类:

    l        L4/2――第4层交换,第2层分组转发

    l        L4/3――第4层交换,第3层分组转发

    l        L7--第7层交换,也就是基于应用层内容的交换。

    基本的服务器负载均衡,比如Web服务器的负载均衡通常采用第一和第二种方法就基本可以实现。而针对于某些特定的服务和特定的需求,则需要依靠第三种方法才能实现负载均衡。

    从本质上讲,第4层的交换对网络协议中的源地址和目标地址进行了更改和替换,以便实现客户端访问一个绑定在负载均衡器上VIP到真实服务器ipRIP)的转换,它根据特定的算法策略对所有的传输流进行修改。第4层的交换是基于状态的,负载均衡器对于每个会话都进行记录。 而源端口与目的端口的结合,以及第3IP寻址,使TCP/UDP可以唯一地识别网络中地每一个会话。

    而第7层的智能性能够进行进一步地控制,即对所有传输流和内容的控制。由于可以自由地完全打开传输流的应用/表示层,仔细分析其中的内容,因此可以根据应用的类型而非仅仅根据IP和端口号做出更智能的负载均衡决定。

     

     

     

    3.   基于负载均衡器的协议层的技术

    3.1. 4层交换第2层分组转发

    服务器负载均衡最简单的实现方法是使用第2层模型。此时,负载均衡器的所有接口在和客户端路由器与被访问的对象服务器处于相同的VLANIP子网中。它的主要优势是简单性。负载均衡器置于网络中时无须改变拓扑结构,也无须重新调整IP来实现负载均衡。但是缺点是每个服务器都要有一个在Internet上注册过的真实IP来提供对互联网客户端的服务

    假设客户端正在与位于10.10.10.0网络中的一个Web站点建立一个http连接,该网络通过VIP 10.10.10.100均衡器进行服务器负载均衡。由客户端向服务器的通信流如下:

    (1)    客户端通过Dns查询或直接输入均衡器上的VIP,并发送一个TCP SYN数据包和VIP建立一个TCP会话。

    (2)    TCP SYN数据包被发送到客户端路由器。客户端路由器将向10.10.10.0网络发送一个ARP广播以解析10.10.10.100MAC地址。均衡器会以它的MAC地址来回应路由器的ARP广播,来代表VIP

    (3)    客户端路由器会向均衡器的MAC地址转发帧。此时,均衡器会作出一个负载均衡的算法判断,并转换MAC地址和目的IP地址为挑选出来的真实服务器的MACRIP,并且在每一层中改变校验和信息等。

    而从服务器到客户机的通信流,则采用相反的逻辑。

    (4)    服务器通过向默认网关10.10.10.1发送帧,来回应TCP SYN-ACK

    (5)    由于帧必须通过均衡器并达到客户端路由器的默认网关,所以对MAC地址和源IP地址进行了逆向转换。

    (6)    最后均衡器向客户端路由器的MAC地址转发帧,该路由器也向客户端发送返回数据包。

    在此过程中,客户端和目标的真实服务器都没有察觉到负载均衡的发生,换句话说就是客户端看到的是自身和均衡器的VIP的持续连接,同时服务器看到的是没有涉及均衡器的客户端连接。

     

    3.2. 4层交换第3层分组转发

    最常见的服务器负载均衡应该是第3(路由)的服务器负载均衡。它与第2层的概念相似,但是区别在于,客户端路由器和对象服务器存在于不同的第2VLANIP子网。均衡器对服务器和客户端间的帧进行路由而不是进行交换。均衡器同时也起到了路由的作用。

    均衡器的位置可能成为客户端IP网络中的一员,这种情况下,客户端路由器无须关心服务器所在的子网,对真实服务器的访问可以通过均衡器上的VIP然后由NAT地址转换来实现,这样部署可以节约使用Internet注册地址。 第二种情况是VIP成为对象服务器所在网络中的一员,在这种情况下,服务器所在网络必须是可路由的公网,或者由其他一个NAT设备进行转换。最后一种情况,VIP是不与均衡器直接连接的子网的一员,客户端路由器必须配置一个静态路由来指向VIP所在的虚拟子网的均衡器的接口。

    部署第3层的负载均衡有2个主要的优势

    l        节省地址空间, 不必使用注册IP,使用符合RFC1918的地址空间即可。

    l        简单, 均衡器同时作为一个路由器,更容易理解其网络拓扑。

    3.3. 基于第7层内容交换技术

    在一般情况下,使用第4层交换就可以达到基本的负载均衡,但是在有些情况下,对于某些应用,使用第7层所含的信息进行决策可以带来更大的益处。第7层的智能性能够进行进一步地控制,即对所有传输流和内容的控制。由于可以自由地


    收藏到:Del.icio.us




    引用地址: