•  
  • 在项目实施过程中,我们经常需要将Web应用服务器与外网隔离,或者需要多台Web应用服务器作负载平衡。通过apache与tomcat整合配置,我们可以很容易实现这些需求。负载均衡就是将客户端的请求分流给后端的各个真实服务器,达到负载均衡的目的。还有一种方式是用两台服务器,一台作为主服务器(Master), 另一台作为热备份(Hot Standby),请求全部分给主服务器,在主服务器当机时, 立即切换到备份服务器,以提高系统的整体可靠性。如下图所示:

    Architecture of Apache and Tomcat cluster, protocols and connectivity

    在实际操作中,主要是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,并拷贝一副本,形成两个节点,如图;image。为了能在同一台PC上运行多个tomcat,必须保证两者的启动端口、关闭端口、和AJP端口均不一样。

  • 修改tomcat6_1\conf\server.xml,主要修改三个地方:

  • <Server port="7005" shutdown="SHUTDOWN">

    <Connector port="7080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

    <Connector port="7009" protocol="AJP/1.3" redirectPort="8443" />

    //修改Engine,添加jvmRoute="lb1"标识

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="lb1">

  • 修改tomcat6_2\conf\server.xml,主要修改三个地方:

    <Server port="9005" shutdown="SHUTDOWN">

    <Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

    <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />

    //修改Engine,添加jvmRoute="lb2"标识

    <Engine name="Catalina" defaultHost="localhost" 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;

    <Proxy balancer://testcluster stickysession=JSESSIONID>

      BalancerMember ajp://127.0.0.1:7009 route=lb1 loadfactor=1

    BalancerMember ajp://127.0.0.1:9009 route=lb2 loadfactor=1 </Proxy>

      #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/

    image

    此时,您可以任意关闭其中一个tomcat,测试可以发现系统照样运行正常。

     

    2.3 负载均衡监控

    修改Apache2.2\conf\httpd.conf,在文本最后加入如下语句;

    <Location /balancer-manager>

    SetHandler balancer-manager

    Order deny,

    allowDeny from all

    Allow from all

    </Location>

请确保已经去掉如下两行的注释:

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/
      <Proxy 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     
     

 </Proxy>   

ps:负载均衡监控迁移到linux下环境,balancer-manager环境又起不来了,今天请教了下池烨师兄,只需要再添加一行

ProxyPass /balancer-manager  ! //直接访问apache,而不要转发到tomcat

接下来就是利用LoadRunner进行压力测试咯。~~

Detail.lee

福建省空间信息工程研究中心

2011.05.17

posted on 2011-05-17 21:25  SIRC_Detaillee  阅读(2011)  评论(0)    收藏  举报