Apache不仅可以作为WEB服务器,也能够作为负载均衡服务器或者反向代理服务器。
部分文字和内容来自网络。
首先,Apache并不是用来设计做负载均衡服务器的,如果需要使用Apache的负载均衡功能,需要手动开启Apache的mod_proxy模块。
利用Apache做负载均衡,有一些基本配置
1).基本配置
假设有一个域名为:www.a.com 的网站要用apache作为负载均衡设备, 首先需要启用Apache的几个必须的模块:
Httpd.conf代码
LoadModule proxy_modulemodules/mod_proxy.so
LoadModule proxy_balancer_modulemodules/mod_proxy_balancer.so
LoadModule proxy_http_modulemodules/mod_proxy_http.so
mod_proxy提供代理服务器功能,mod_proxy_balancer提供负载均衡功能, mod_proxy_http让代理服务器能支持HTTP协议。如果把mod_proxy_http换成其他协议模块(如mod_proxy_ftp),能支持其他协议的负载均衡。
然后要添加以下配置:
Httpd.conf代码
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMemberhttp://node-a.myserver.com:8080
BalancerMemberhttp://node-b.myserver.com:8080
</Proxy>
ProxyPass / balancer://mycluster/
# 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!!
<Location /balancer-manager>
SetHandler balancer-manager
order Deny,Allow
Deny from all
Allow from localhost
</Location>
注:node-a.myserver.com,node-b.myserver.com是另外两台服务器的域名,不是当前服务器的域名
从上面的 ProxyRequests Off 这条可以看出,实际上负载均衡器就是一个反向代理,只不过它的代理转发地址不是某台具体的服务器,而是一个 balancer:// 协议:
ProxyPass / balancer://mycluster协议地址可以随便定义。然后,在<Proxy>段中设置该balancer协议的内容即可。 BalancerMember指令可以添加负载均衡组中的真实服务器地址。
下面那段<Location /balancer-manager>是用来监视负载均衡的工作情况的,调试时可以加上(生产环境中禁止使用!),然后访问 http://localhost/balancer-manager/ 即可看到负载均衡的工作状况。
OK,改完之后重启服务器,访问你的Apache所在服务器的地址(www.a.com),即可看到负载均衡的效果了。
出错提示:
访问网页提示Internal Serveral Error,察看error.log文件
Error.log代码
[warn] proxy: No protocol handler wasvalid for the URL /admin/login_form. If you are using a DSO version ofmod_proxy, make sure the proxy submodules are included in the configurationusing LoadModule.
原因是配置:# ProxyPass / balancer://mycluster 可能少了一个/
2). 负载比例分配
打开 balancer-manager 的界面,可以看到请求是平均分配的。
如果不想平均分配怎么办?给 BalancerMember 加上 loadfactor 参数即可,取值范围为1-100。比如你有三台服务器,负载分配比例为 7:2:1,只需这样设置:
Httpd.conf代码
复制代码 代码如下:
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMemberhttp://node-a.myserver.com:8080 loadfactor=7
BalancerMemberhttp://node-b.myserver.com:8080 loadfactor=2
BalancerMemberhttp://node-c.myserver.com:8080 loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster
3).负载分配算法
默认情况下,负载均衡会尽量让各个服务器接受的请求次数满足预设的比例。如果要改变算法,可以使用lbmethod 属性。如:
Httpd.conf代码
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMemberhttp://node-a.myserver.com:8080 loadfactor=7
BalancerMemberhttp://node-b.myserver.com:8080 loadfactor=2
BalancerMember http://node-c.myserver.com:8080loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster
ProxySet lbmethod=bytraffic
lbmethod可能的取值有:
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
各种算法的原理请参见Apache的文档。
2. 热备份(Hot Standby)
热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器:
Httpd.conf代码
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMemberhttp://node-a.myserver.com:8080
BalancerMemberhttp://node-b.myserver.com:8080 status=+H
</Proxy>
ProxyPass / balancer://mycluster
从 balancer-manager 界面中可以看到,请求总是流向 node-a ,一旦node-a挂掉,Apache会检测到错误并把请求分流给 node-b。Apache会每隔几分钟检测一下 node-a 的状况,如果node-a恢复,就继续使用node-a。
Tomcat 和 Apache的负载均衡组
下面是2个tomcat加一个Apache做的负载均衡组,供参考。
准备工作:
1. 使用tomcat免安装版,放在不同的目录下,tomcat使用不同的端口?
2. 安装JDK;
3. 下载安装apache_2.2.11-win32-x86-no_ssl.msi
apache使用的是apache_2.2.11-win32-x86-no_ssl.msi?如果版本低于2.2Apache负载均衡的配置要有所不同,因为这个2.2.11和2.2.8版本集成了jk2等负载均衡工具,所以配置要简单许多?
把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务?服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个"Itworks!"的页面就代表Apache已经正常工作了?
在Apache安装目录下找到conf/httpd.conf文件,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块?
LoadModuleproxy_module modules/mod_proxy.so
LoadModuleproxy_ajp_module modules/mod_proxy_ajp.so
LoadModuleproxy_balancer_module modules/mod_proxy_balancer.so
LoadModuleproxy_connect_module modules/mod_proxy_connect.so
LoadModuleproxy_ftp_module modules/mod_proxy_ftp.so
LoadModuleproxy_http_module modules/mod_proxy_http.so
向下拉动文档找到<IfModuledir_module>节点,在DirectoryIndexindex.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做?继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符?
然后打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上
<VirtualHost*:80>
ServerAdmin管理员邮箱
ServerNamelocalhost
ServerAliaslocalhost
ProxyPass/ balancer://sy/ stickysession=jsessionid nofailover=On
ProxyPassReverse/ balancer://sy/
ErrorLog"logs/sy-error.log"
CustomLog"logs/sy-access.log" common
</VirtualHost>
然后回到httpd.conf,在文档最下面加上
ProxyRequestsOff
<proxybalancer://sy>
BalancerMemberajp://127.0.0.1:8009 loadfactor=1 route=jvm1
BalancerMemberajp://127.0.0.1:9009 loadfactor=1 route=jvm2
</proxy>
ProxyRequestsOff 是告诉Apache需要使用反向代理,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口?loadfactor是负载因子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发?这样就可以使配置更灵活,例如可以给性能好的服务器增加处理工作的比例,如果采取多台服务器,只需要修改ip地址和端口就可以了?route参数对应后续tomcat负载均衡配置中的引擎路径(jvmRoute)
原文地址:http://blog.csdn.net/ffm83/article/details/42420833