当网站被越来越多的人访问时,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
踩一下