使用网络地址转换实现多服务器负载均衡

www.net130.com     日期:2007-2-7    浏览次数:
作者:王波    出处:http://freebsd.online.ha.cn

摘要:本文探讨了分布式网络服务器使用的负载均衡技术及负载分配的策略,并基于网络地址转换在FreeBSD上实现了负载均衡网关,应用于我们的Internet网络服务器上,将负载分给多个服务器分担,以解决Internet服务器面临的大量并发访问造成的CPU或I/O的高负载问题。为了达到最佳的负载均衡效果,负载控制器需要根据各个服务器的当前CPU和I/O状态来分配负载,这就需要动态监视服务器的负载,并应用优化的负载分配策略,达到平均分配负载的目的。

关键字: 负载均衡,网络地址转换,FreeBSD

1. 引言

Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,服务器的处理和I/O能力成为了提供服务的瓶颈。由于单台服务器的性能总是有限的,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。

最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的[1]。DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。

反向代理服务器可以将请求转发给内部Web服务器,如果代理服务器能够将请求均匀转发给多台内部服务器,就能达到负载均衡的目的[2]。反向代理方式下能应用优化的负载均衡策略,每次访问最空闲的内部服务器来提供服务。但是随着并发连接数量的增加,代理服务器本身的负载也变得非常大,最后反向代理服务器本身会成为服务的瓶颈。

支持负载均衡的地址转换网关中可以将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的[3]。很多硬件厂商将这种技术集成在他们的交换机中,作为他们第四层交换的一种功能来实现,一般采用随机选择、根据服务器的连接数量或者响应时间进行选择的负载均衡策略来分配负载。然而硬件实现的负载控制器灵活性不强,不能支持更优化的负载均衡策略和更复杂的应用协议。

除了这三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如HTTP协议中的重定向能力等,但它依赖于特定协议,因此使用范围有限。根据现有的这些负载均衡技术,我们选择了使用软件方式实现网络地址转换的负载均衡的方式,以弥补硬件负载均衡器的不灵活,并应用优化的均衡策略来实现后端服务器负载分担的最优状态。

2. 负载均衡策略

为了将负载均匀的分配给内部的多个服务器上,就需要应用一定的负载均衡策略。传统的负载均衡策略并没有考虑到服务请求的不同类型、后台服务器的不同能力以及随机选择造成的负载分配不均匀等问题。为了使得负载分配十分均匀,就要应用能够正确反映各个服务器CPU及I/O状态的负载均衡策略[4]

客户发起的服务请求类型是多种多样的,按照对处理器、网络和I/O的资源要求,可以简单的将它们分为两个不同类别,以便应用不同的处理策略:

  1. 静态文档请求:例如普通的文本、图象等静态多媒体数据,它们对处理器负载影响不大,造成的磁盘I/O负载与文档的大小成正比,主要对网络I/O造成压力。

  2. 动态文档请求:更为常见的请求常常需要服务器预先进行处理,例如搜寻数据库、压缩解压缩多媒体文件等,这些请求需要相当大的处理器和磁盘I/O资源。

对于静态文档,每个服务进程占用大致相同的系统资源,因此就可以使用进程数来表示系统负载。而动态文档服务需要进行额外的处理,其占用的系统资源就超过处理静态请求,因此需要使用一个权重来表示。这样一个最简单的服务器负载表示公式就为:

其中L为服务器的负载,Ns为静态文档服务进程数,Nd为动态文档服务进程数,而a为每个动态文档服务相对于静态文档服务的权重,可以在10到100之间进行选择。

在这个公式中没有考虑服务器硬件的限制,当达到硬件限制的时候,由于资源紧张,服务器的负载就会明显增加。例如由于服务器内存大小的限制,一些进程就要被交换到硬盘上,使得系统负载迅速增加。考虑了系统硬件限制,则服务器的负载可以表示为:

新增加的参数 Ll表示这个服务器普通负荷的限度,它要根据每个服务器本身的硬件能力来设置。而b表示超出正常负载时用来限制分配给服务器任务的权重,应该设置为大于Ll的数值,以表示硬件限制作用。通常在一个服务器集群中,硬件设置越差的服务器这个权重越要设置的大,以避免在所有的服务器都超负载运行时,硬件最差的服务器反而负载最高。因此b是和本服务器硬件限制Ll成反比的,则b可以设置为:

Llmax为服务器集群中最高硬件配置的服务器的Ll值。当确定了每个服务器的负载之后,中心控制负载分配的服务器就能将负载正确的分发给最空闲的服务器,从而不会象其他的负载分配策略那样会导致负载分配不均匀的情况。

本新闻共2页,当前在第1页  1  2  

相关新闻