利用mod_proxy实现Apache和Tomcat整合负载均衡
[*]在项目实施过程中,我们经常需要将Web应用服务器与外网隔离,或者需要多台Web应用服务器作负载平衡。通过apache与tomcat整合配置,我们可以很容易实现这些需求。负载均衡就是将客户端的请求分流给后端的各个真实服务器,达到负载均衡的目的。还有一种方式是用两台服务器,一台作为主服务器(Master), 另一台作为热备份(Hot Standby),请求全部分给主服务器,在主服务器当机时, 立即切换到备份服务器,以提高系统的整体可靠性。如下图所示:
在实际操作中,主要是Apache作为主服务器运行,当监听到有jsp或者servlet的请求时,将请求转发给tomcat服务器,由tomcat服务器进行解析后,发回apache,再由apache发回用户。一般情况下将静态文件部署在Apache web服务器,相关JSP文件部署在tomcat容器。
Apache 2.1版本以上,可以通过mod_proxy和mod_proxy_balance结合,通过简单配置,不用下载mod_jk即可实现负载均衡。
参考:
mod_proxy:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
mod_proxy_balance:http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
本文在同一台windows7下运行两个tomcat和一apache进行负载均衡测试。
软件安装:
[*]1 下载Tomcat到D:\web_server,并拷贝一副本,形成两个节点,如图;。为了能在同一台PC上运行多个tomcat,必须保证两者的启动端口、关闭端口、和AJP端口均不一样。
[*]修改tomcat6_1\conf\server.xml,主要修改三个地方:
//修改Engine,添加jvmRoute="lb1"标识
[*]修改tomcat6_2\conf\server.xml,主要修改三个地方:
//修改Engine,添加jvmRoute="lb2"标识
2 下载并安装apache 2.2软件包,
2.1 查找Apache2.2\conf\httpd.conf中去掉如下几行的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http_module modules/mod_status.so
2.2 修改Apache2.2\conf\httpd.conf,在文本最后面添加如下文本:
ProxyRequests Off #,关闭正向代理,负载均衡器就是一个反向代理
#loadfactor设置是否平均分配,如下是1:1;
BalancerMember ajp://127.0.0.1:7009 route=lb1 loadfactor=1
BalancerMember ajp://127.0.0.1:9009 route=lb2 loadfactor=1
#ProxyPass / balancer://testcluster/是协议地址,前后都应该有斜杠 /
ProxyPass / balancer://testcluster/ lbmethod=byrequests stickysession=JSESSIONID
# lbmethod 提供了三种负载方法,分别是byrequest、bytraffic、bybusyness;见下面的表格
#负载均衡会尽量让各个服务器接受的请求次数满足预设的比例。如果要改变算法,可以使用 lbmethod 属性
lbmethod=byrequests
按照请求次数均衡(默认)
lbmethod=bytraffic
按照流量均衡
lbmethod=bybusyness
按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
PS:Apache2默认端口号是80,最后修改成其它端口号,以免和其它app发生冲突,在Apache2.2\conf\httpd.conf查找Listen 修改为8011
#Listen 12.34.56.78:80
Listen 8011
配置完后,重新启动apache、和两个tomcat,在浏览器中输入:http://localhost:8011/examples/
此时,您可以任意关闭其中一个tomcat,测试可以发现系统照样运行正常。
2.3 负载均衡监控
修改Apache2.2\conf\httpd.conf,在文本最后加入如下语句;
SetHandler balancer-manager
Order deny,
allowDeny from all
Allow from all
请确保已经去掉如下两行的注释:
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_status.so //之前因为忽略了这行,找原因找了一天,后来啃官方文档才发现缺失了这个模块。
接下来就可以访问http://localhost:8011/balancer-manager监控负载均衡
3 这是备份服务器设置(这个没做实验,引自apache官方网站):
ProxyPass / balancer://hotcluster/
BalancerMember ajp://1.2.3.4:8009 loadfactor=1
BalancerMember ajp://1.2.3.5:8009 loadfactor=2
# The below is the hot standby
BalancerMember ajp://1.2.3.6:8009 status=+H //此为备份服务器,只需添加status=+H
ProxySet lbmethod=bytraffic
ps:负载均衡监控迁移到linux下环境,balancer-manager环境又起不来了,今天请教了下池烨师兄,只需要再添加一行
ProxyPass /balancer-manager! //直接访问apache,而不要转发到tomcat
接下来就是利用LoadRunner进行压力测试咯。~~
Detail.lee
福建省空间信息工程研究中心
2011.05.17
页:
[1]