我们首先介绍一下什么是负载平衡:

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。

    负载平衡的作用是什么呢?

如果你发现你的Web站点负载量非常大时,应当考虑使用负载均衡技术来将负载平均分摊到多个内部服务器上。如果有多个服务器同时执行某一个任务时,这些服务器就构成一个集群(clustering)。使用集群技术可以用最少的投资获得接近于大型主机的性能。


    目前比较常用的负载均衡技术主要有:



    1. 基于DNS的负载均衡

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

    2. 反向代理负载均衡

    使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器及以上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。Apusic负载均衡器就属于这种类型的。

    3. 基于NAT的负载均衡技术

    网络地址转换为在内部地址和外部地址之间进行转换,以便具备内部地址的计算机能访问外部网络,而当外部网络中的计算机访问地址转换网关拥有的某一外部地址时,地址转换网关能将其转发到一个映射的内部地址上。因此如果地址转换网关能将每个连接均匀转换为不同的内部服务器地址,此后外部网络中的计算机就各自与自己转换得到的地址上服务器进行通信,从而达到负载分担的目的。


    负载均衡服务器的好处

    由于网民数量激增,网络访问路径过长,用户的访问质量容易受到严重影响,尤其是当用户与网站之间的链路被突如其来的流量拥塞时。而这种情况经常发生在异地互联网用户急速增加的应用上。这时候,如果在服务端应用负载均衡(GSLB)技术,就可以合理分担系统负载、提高系统可靠性、支持网站内容的虚拟化。在实际应用中,许多IDC,如互联通更是采用GSLB与Cache、Mirror相结合的方法来提供网络加速服务。负载均衡服务具有如下特点:

    1)高智能化

    运用虚拟IP(VIP)地址代表目标服务器和应用,将会话分配到最高可用性的服务器,全程监控每个会话,服务恢复后自动重新登记,并转发客户机和服务器信息包时提供全地址转换。简单有效的负载均衡算法可以配置包括循环法、最少连接法、散列法或最少失误法等多种不同的负载均衡方法,也可以对个别服务器配置最大连接数量阈值和加权值,以避免服务器超载。

    2)高可靠性

    架构在专用的高速骨干网之上,该主干网络提供延迟极小的网络连通性,从而保障GSLB的功能正常发挥和高性能,远远优于基于公网的GSLB。并且,当主站点机房的?Internet 出口出现故障时,还能将用户自动、透明地从其他分站点Internet入口导向主站点服务器。

    3)高可用性

    采用热备份方法,在极短时间内对服务器链路、交换端口和交换机进行检测和故障转移,使应用免受故障影响;任何一个服务器或服务器群发生故障或阻塞,用户将被自动引导到下一个最佳备份服务器或站点,从而更进一步提高了服务和内容的可用性。


    服务器负载均衡

    网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。

    计算集中型的应用,比如电子商务网站,服务器计算负荷会很大;读写频繁的应用,比如网络数据库,存储系统则面临着考验;传输量大的应用,比如视频服务,数据总是无法快速传送,无法实现最好的效果;访问量大的应用,路由器与防火墙容易成为瓶颈。想要合理解决这些问题,升级设备、改变拓扑是"笨办法",相对巧妙的方法是采用负载均衡技术,用多个设备共同完成任务。


    负载均衡技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。负载均衡的应用,能够有效地解决网络拥塞问题,能够就近提供服务,实现地理位置无关性(异地负载均衡)。同时,这项技术还能提高服务器的响应速度,提高服务器及其他资源的利用效率,避免网络关键部位出现单点失效,从而为用户提供更好的访问质量。


    服务器必须具备处理大量并发访问服务的能力,其处理能力和I/O(输入/输出)能力已经成为提供服务质量好坏的重要因素。负载均衡作为一种策略,能够让多台服务器或多条链路共同承担繁重的计算或I/O任务,从而以较低成本消除网络瓶颈,提高网络的灵活性和可靠性。


    在业务量不断增长,需要提高服务能力时,使用服务器负载均衡技术,只需在智能化交换机上接上新的服务器,就可以与原有的服务器共同构成更大容量的服务系统。这样,既可以保证在扩容时服务不中断,又有效地保障了原有的投资。


    如何解决负载平衡问题

一、问题的提出

随着Internet和Intranet的高速发展,基于IP的应用越来越成为网络最普遍,最有用和甚至是必不可少的部分。许多知名的站点和ISP常常要在短时间内接受大量的访问而力不从心。这给网络的升级维护带来了一些问题:

    1. 如果采用单一的服务器提供服务,很明显,存在着单点脆弱性(Single Point of Failure)。这台服务器任何部件稍有闪失,都会给服务带来问题;同时这也是昂贵的、难以扩展的方案:服务器的能力需要不断的提高,扩充内存,升级 CPU,增加硬盘…在系统维护和升级的期间,服务被迫中断;而且这种升级也有极限,总有一天,无论如何调整服务器的性能都无法满足用户的要求。

    2. 如果采用服务器群,主要的缺点在于访问地址的复杂化和负载不平衡。对于每台服务器都必须有相应的唯一的IP地址,给用户的访问和网络管理带来不便;这些服务器之间的流量分配是随机的,不会考虑服务器当前的负载情况,在某些情形之下反而造成连接失败。

    二、目前典型的方法

    1. 使用Round-Robin DNS,将服务请求分布到不同的服务器上。此种方法运行在应用层,由于简单地将域名请求分布,并不了解正在运行的服务负载及网络链路,因此,并不能提供真正的负载平衡。Internet上最著名的负载分配方法叫 Round-Robin DNS。 Round-Robin DNS运行在域名服务器上,是用来向每一台服务器乃至每一个进程分配用户申请的软件,它可以让你配置一份 IP地址名单,然后,就可以通过域名服务器 (DNS)把申请有序地分配到机器、或以不同数字代表的进程之上。然而, Round-RobinDNS被普遍公认为一种并非完美的解决方案。因为,它无法反映出不同的机器可能拥有不同的能力 (尽管在非常有限的程度上,可通过对能力更强的机器使用多个别名来进行粗略的能力估价);它不可能作为因数记入负载水平;而且它也无法检测并避开那些已经瘫痪了的服务器。

    2 使用对应用或网络敏感的DNS服务,此种方案相对第一种方案提供了更好的特征,但由于DNS的Cache机制,客户仍然不能得到真正的负载平衡。

    3 使用双机备份的大型服务器系统是当前许多ICP/ISP的升级选择。但是此种方案并不能避免网络上的单点故障,而且其中的一台服务器在一般情况下处于休眠状态,增加了系统成本和管理成本。

    4 使用网络层(IP)的网络流量分配设备(Director)。此种方法支持真正的负载平衡,并且提供服务的系统可通过网络连接,分布在不同的地区。但是,不同的解决方案提供的特性区别较大,如是否支持分布的网络冗余、管理是否方便等。

    三、IP负载平衡方案

    通过IP负载平衡产品,分配网络访问流量,协同一组服务器共同工作,对用户提供完全透明的访问通道,使高性能、高承受力且只有一个简单的访问地址的站点成为可能。

IP负载平衡机制给多服务器环境带来了两个主要的好处:

    1 系统可扩缩性(Scalable)

    由于Web站点和服务器群拥有越来越多的用户,硬件的升级越来越频繁,这无疑是一件令人乏味和很不经济的事情。系统在安装了负载平衡产品之后,负载平衡器可以让一簇相同或不同的服务器共同来完成一台超级服务器的工作,给系统提供了无限的升级能力,减少了系统升级的开销。负载平衡器介于服务器和用户端之间,扮演了一个智能的指挥者角色。根据当前各个服务器的工作状态和能力来分配服务器负载,使整个系统能更高效的响应用户的请求。

    2 系统的容错性(Fault Tolerance)

    IP负载平衡器实时监视各个服务器的工作状态,不分配任务给那些力不从心的服务器,这种有弹性的负载分配方式充分利用了每台服务器,使用户能得到流畅、连续的透明的服务。这也正是在线服务的最终目标。
1、查看是否有mod_proxy_http.so、mod_proxy_balancer.so、mod_proxy.so三个模块

# ll /usr/local/apache2/modules

2、加载模块

# cd /usr/local/src/httpd-2.2.23/modules/proxy/

# /usr/local/apache2/bin/apxs -c -i mod_proxy.c proxy_util.c

# /usr/local/apache2/bin/apxs -c -i mod_proxy_balancer.c

# /usr/local/apache2/bin/apxs -c -i mod_proxy_http.c

3、修改http.conf配置文件

# vim /usr/local/apache2/conf/httpd.conf

 LoadModule proxy_module    modules/mod_proxy.so

 LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

 LoadModule proxy_http_module  modules/mod_proxy_http.so

 ProxyRequests Off

 <Proxy balancer://clusterphpinfo>

 BalancerMember http://10.0.2.203:80 loadfactor=1

 BalancerMember http://10.0.2.204:80 loadfactor=1

 </Proxy>

 ProxyPass / balancer://clusterphpinfo

4、重启httpd服务

# service httpd restart

5、通过apache将后端服务器做出主从,只需要在从服务器后面添加status=+H

# vim /usr/local/apache2/conf/httpd.conf

 BalancerMember http://10.0.2.204:80 loadfactor=1 status=+H

-----------------------------------------------------------