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

      利用mod_proxy实现Apache和Tomcat整合负载均衡

      在实际操作中,主要是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,并拷贝一副本,形成两个节点,如图;利用mod_proxy实现Apache和Tomcat整合负载均衡。为了能在同一台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/

      利用mod_proxy实现Apache和Tomcat整合负载均衡

      此时,您可以任意关闭其中一个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监控负载均衡

    利用mod_proxy实现Apache和Tomcat整合负载均衡

    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

    相关文章:

    • 2021-09-15
    • 2021-08-08
    猜你喜欢
    • 2021-08-23
    • 2021-07-07
    • 2022-12-23
    • 2022-12-23
    • 2021-10-14
    • 2021-12-18
    • 2022-01-07
    相关资源
    相似解决方案