当前位置:技术首页 >> 操作系统 >> Linux/Unix >> 多方法实现HTTP访问的负载均衡
多方法实现HTTP访问的负载均衡
2008-09-28 00:46:36  作者:  来源:互联网  浏览次数:7  文字大小:【】【】【
  •     当网站被越来越多的人访问时,Web服务器就容易出现带宽和资源危机。面对访问数量的快速增长,必须采用多服务器技术,并在这些服务器之间进行负载均衡(Round Robin)才能满足大量并发的访问需求。

  当网站被越来越多的人访问时,Web服务器就容易出现带宽和资源危机。面对访问数量的快速增长,必须采用多服务器技术,并在这些服务器之间进行负载均衡(Round Robin)才能满足大量并发的访问需求。
  对Linux服务器来说,由于其在网络方面具有的强大功能,有很多方法可以实现HTTP访问的负载均衡。下面就介绍几种简单、实用的方法。

利用R-Proxy

  Proxy是常用的上网代理服务器。为了节约带宽、提高存取效率,Proxy可以提供Cache的功能,所以Proxy服务器也被称为“Proxy Cache Server(代理缓存服务器)”。R-Proxy也是一种Proxy代理服务器。“R”就是“Reverse(反向)”的意思,即反过来用于实现代理Internet使用者存取内部受限网站的功能。它同样可以提供文件Cache。
  基本的R-Proxy服务器只能单纯地按照网页目录分配HTTP访问,并且一个网页目录只能连接一台主机。当某台主机宕机后,该主机连接的网页目录就失效了。因此需要通过修改R-Proxy的配置,把网页目录分散到不同的主机进行负载均衡。
  首先确认Apache有R-Proxy。通常在httpd.conf文件中能看到如下代码,就表示已经安装了R-Proxy:

    LoadModule proxy_module /usr/libexec/apache/libproxy.so
    AddModule mod_proxy.c

  如果没有,则需要进行安装。
  然后,把“<IfModule mod_proxy.c>”和“</IfModule>”之间的代码替换为如下内容:

    ProxyRequests On<Directory proxy:*>
    Order deny,allow
    Deny from all
    Allow from .your_domain.com
    </Directory>

  通过以上设置,就可以实现HTTP访问的负载均衡。

利用mod_rewrite和mod_proxy

  这个方法主要是通过Apache附带的mod_rewrite和mod_proxy模块来实现。mod_rewrite模块提供了一个基于规则的实时转向URL请求引擎,能兼容在Apache 1.3及更高的版本中。mod_proxy模块是一个 HTTP 1.1 代理/网关服务器,实现了 Apache 对 FTP、CONNECT(用于 SSL)、HTTP0.9、HTTP 1.0和HTTP 1.1的代理功能。该模块在Apache v1.2.x和Apache v1.3.x中进行了改良,并去除了一些Bug,然后在Apache v2.0中进行了大的修整。
  假定实际环境有六台Apache Web Server。通过对安装Proxy的主机进行如下配置,利用Apache的mod_rewrite和mod_proxy模块来实现负载均衡。当然要求这两个模块的装载没有问题。

    # vi httpd.conf
    RewriteEngine on
    RewriteLogLevel 9
    RewriteLog /var/log/apache2/rewrite_log
    #让mod_rewrite从/etc/httpd/rproxy.conf中随机选取一个值
    #/etc/httpd/rproxy.conf内容如下:
    # serverfarm server1|server2|server3|server4| server5|server6
    RewriteMap servers rnd:/etc/httpd/rproxy.conf
    RewriteRule ^/(.*)$
http://${servers:serverfarm}/$1 [P ,L]
    #mod_proxy将访问分配到6台Server上
    ProxyRequests Off
    ProxyPassReverse /
http://server1/
    ProxyPassReverse / http://server2/
    ProxyPassReverse / http://server3/
    ProxyPassReverse / http://server4/
    ProxyPassReverse / http://server5/
    ProxyPassReverse / http://server6/

  配置完成后,监控负载均衡的情况需要设置Log Server。首先,把Log文件集中到一台机器(Log
Server),让 syslogd 进程来处理。然后,syslogd 将处理后的 Log 文件传给 Central Logging
Server。
    在Log Server的/etc/syslog.conf文件里加入如下内容:

    local5.info   /var/log/apache_access_log
    local6.*   /var/log/apache_error_log

  然后在syslogd的启动命令中加上“-r”参数,这样才可以接收网络传送的Log文件。
使用如下命令重启syslogd进程:

    #killall -HUP syslogd

   接着在Proxy Server的httpd.conf配置文件里进行如下设置:

    LogLevel warn
    ErrorLog syslog:local6
    CustomLog "|/usr/bin/logger -t APACHE -p local5.info" common

    随后在/etc/syslog.conf文件中加入如下内容:

    local5.info   @logserver
    local6.*   @logserver

   重启syslogd进程和Apache,即可读取负载均衡所产生的日志了:

    # killall -HUP syslogd && apachectl

利用Pound

  Apache的mod_proxy模块在性能和安全性上都有所欠缺,Pound是专门设计来提高负载均衡效率
和安全性的第三方软件。该软件安装及相关说明可以到其英文网站http://www.apsis.ch/pound去详细
了解。这里只给出一份基本的Pound配置文件:

    ## Minimal sample pound.cfg
    ## see pound(8) for details
    #######################
    ## global options:
    User      nobody
    Group      nobody
    RootJail   /chroot/pound
    ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
    ExtendedHTTP   0
    WebDAV      0
    ## Logging: (goes to syslog by default)
    ##   0   no logging
    ##   1   normal
    ##   2   extended
    ##   3   Apache-style (common log format)
    LogLevel   1
    ## check backend every X secs:
    # 每三十秒检查哪一台Server无标志
    Alive      30
    #######################
    ## listen, redirect and ... to:
    ListenHTTP 0.0.0.0,80
    # 客户端要求的URL字符串,用regex
    UrlGroup ".*"
    # 在Web Server 1~5之间进行负载均衡
    BackEnd 192.168.0.1,80,1
    BackEnd 192.168.0.2,80,1
    BackEnd 192.168.0.3,80,2
    BackEnd 192.168.0.4,80,3
    BackEnd 192.168.0.5,80,4
    EndGroup

  其中笔者给出中文注释的代码需要根据实际情况进行设置。“BackEnd 192.168.0.1,80,1”一行最后的数字“1”表示访问的优先级别,数字越小被访问的机率就越大。

0

顶一下

0

踩一下
友情链接 | 诚聘英才 | 关于我们 | 版权声明 | 联系我们 | 广告服务

  •     京ICP备08010289号    Powered by D.V.B