在本文中,向各位网友介绍Web服务器的负载均衡技术。
目前除去Web编程(PHP和MySQL)的负载均衡技术主要有以下3种:

一 软件负载均衡

1 DNS轮询
即在DNS服务器为一个域名的A记录添加多个IP地址。
这样用户在访问网站时,DNS服务器会随机指向不同的服务器。

DNS轮询(Round-robin DNS)技术是负载平衡最常用的方法之一。最早的负载均衡技术是通过DNS服务中的随机名字解析来实现的。在DNS服务器中,可以为多个不同的地址配置同一个名字,这个数据被发送给其他名字服务器,而最终查询这个名字的客户机将在解析这个名字时随机使用其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,因此不同的客户访问的也就是不同地址的Web服务器,从而达到负载均衡的目的。

例如,如果希望使用三个Web服务器来回应对www.cqcc.com的HTTP请求,设它们的IP地址分别是:202.192.99.1,202.192.99.2,202.192.99.3

。安装一个循环复用DNS软件,配置这个软件使得每次要求解析www.cqcc.com时返回所有三个IP地址。第一次解析结果中返回地址的次序与前面

列出的相同,下一次请求则得到稍微不同的答案:202.192.99.2,202.192.99.3,202.192.99.1。再下一次则得到第三个答案:202.192.99.3

,202.192.99.1,202.192.99.2。第一个客户将同202.192.99.1建立连接,因为202.192.99.1是它所看到的第一个IP地址。第二个客户看到的

第一个IP地址是202.192.99.2,因此它将访问202.192.99.2。同样,第三个客户将访问202.192.99.3……

针对上面例子,可以设置该域的DNS服务器中关于该域的数据至少包括与下面例子类似的结果:

www1 IN A 202.192.99.1

www2 IN A 202.192.99.2

www3 IN A 202.192.99.3

www IN CNAME www1

www IN CNAME www2

www IN CNAME www3

这里先为每个计算机定义一个真实名字(www1、www2、www3),然后再为它们定义同一个别名。可以直接针对不同地址设置同一个真实名字(A

记录),只是使用别名的方法易于管理一些。

由于此时反向解析只能针对一台计算机,那么每个Web服务器都需要使用ServerName重新定义同一个名字,或者设置名字解析的顺序为hosts文

件优先,并在hosts文件中定义本身为www,以保证每个服务器的名字设置保持一致。

循环DNS具有对客户机和服务器透明的优点。在事务处理开始时,它也只执行一次。但是,循环DNS常常不能成功,因为中间名服务器和客户机

软件(包括应用很广的浏览器)常常将DNS返回的IP地址存储起来,或忽略存在时间(TTL)值。TTL是一位IP数据比特位,用来指示IP数据报在

被丢弃前可以转发到其它路由器的时间长度。

由于IP地址存储的原因,DNS服务器提供的负载平衡功能被绕过去了,客户机继续使用被存储起来的IP地址,而不去进行重新连接。这就产生了

一个“热点”,在这个“热点”上,过度使用的服务器继续接收额外的接入。

DNS负载均衡的另一个问题是一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,而DNS服

务器并不知道这一点,因此客户请求将被延迟,或返回一个“无法访问服务器”消息给用户,在此期间保存了故障服务器地址的客户计算机将

不能正常访问服务器。

由于DNS数据是具备一个刷新时间的标志的,一旦超过这个时间限制过期,其他DNS服务器就需要和这个服务器交谈以重新获得地址数据。如果

刷新时间较短,不同地方的DNS服务器能更新对应的地址,使出现故障的服务器地址可以及时删除,用户仍旧可以被引导到正常的服务器上,但

如果用户缓冲了故障服务器的IP地址,这种方法也不能解决问题。同时将过期时间设置的过低将使DNS流量大增,而造成额外的网络问题。

由于循环DNS没有区分端口的能力,不能意识到服务器的可用性并且不能考虑服务器上的现有负载,无法对服务器负载进行动态地分析从而使得

下一个请求总是由负载最小的服务器处理,因此循环复用DNS还有太多的限制,只能算是一种勉强可接受的负载平衡方案。

尽管存在多种问题,然而它可能是成本最低,也是最容易实现的技术,目前国内很多虚拟主机提供商和门户网站仍在使用,如Sohu网站,我们可以使用Nslookup www.sohu.com一试。

2 Apache2 mod_proxy_balancer
注意apache 1.x不包括此模块,而在Apache2中,使用它容易实现负载均衡。
相关文档:http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy_balancer.html

3 HA Proxy
这是一款高性能,高稳定性的负载均衡模块。
相关URL:http://haproxy.1wt.eu/

4 LVS的(Linux Virtual Server)
这是一款广受赞誉的负载均衡软件。
相关URL:linuxvirtualserver

二 负载平衡硬件设备

1 Summit48I

2 NETscalar

3 BigIP

开源 Open Source
Linux,FreeBSD,OpenSolaris,MySQL,Eclipse….

开放
开放Api
Facebook,Google,Xiaonei,51….

开源并不意味免费,它是一个商业模式,我们并不标榜它有多高尚。
个人可以从开源大环境中,在参与中赢得最大化的尊重。
商业公司可以脱离IT巨头的控制,充分发挥社区的力量,使软件功能更完善,功能更强壮,开源软件与互联网是天生的一对,它使SAAS得以真正实现。