2131 发表于 2015-3-4 08:37:35

Apache负载均衡之mod_proxy模块实现

实验环境:一台虚拟机,IP:192.168.1.117实验目的:学习mod_proxy的负载功能,实现Apache反代并且负载到后端两个tomcat。实验步骤:在/etc/httpd/conf.d目录下增加配置文件,实现Apache的负载均衡。
# cd /etc/httpd/conf.d
# vim mod_proxy.conf

      BalancerMember http://192.168.1.117:8080 loadfactor=1 route=TomcatA
      BalancerMember http://192.168.1.117:9080 loadfactor=1 route=TomcatB
      ProxySet lbmethod=byrequests


ProxyPass / balancer://lbcluser1/
ProxyPassReverse / balancer://lbcluser/
保存退出
在上面配置文件和ProxyPass / balancer://lbcluser1/ 的中间中添加如下,这样可以访问其status页面。

   SetHander balancer-manager
   ProxyPass !
   Order allow,deny
   Allow from all

即是下面配置, # vim mod_proxy.conf

      BalancerMember http://192.168.1.117:8080 loadfactor=1 route=TomcatA
      BalancerMember http://192.168.1.117:9080 loadfactor=1 route=TomcatB
      ProxySet lbmethod=byrequests



   SetHander balancer-manager
   ProxyPass !
   Order allow,deny
   Allow from all


ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster/
保存退出之后
# httpd -t
# service httpd restart



下面在tomcat下创建test测试页
现在两个tomcat上做测试页,即在/usr/local/tomcatA/webapps/目录下
创建# mkdir -pv ./test/WEB-INF/{classes,lib},并且在test目录下穿件文件
# vim index.jsp
<%@ page language="java" %>

TomcatA

    TomcatA. .just a test page
   
      
      
    <% session.setAttribute("changyu.com","changyu.com"); %>
      
      
      
      
      
   
   
Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>



同理在tomcatB同位置处
演示效果,在TomcatB上某context中(如/test),提供如下页面
<%@ page language="java" %>

TomcatB

    TomcatB.just a test page
   
      
      
    <% session.setAttribute("changyu.com","changyu.com"); %>
      
      
      
      
      
   
   
Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>




    还有一步就是在/usr/local/tomcat{1,2}/webpapps/test/WEB-INF/的目录下加一个web.xml文件并且在其任意位置添加。

对于tomcatA来说
# cp ./web.xml /usr/local/tomcatA/webapps/test/WEB-INF/
# cd /usr/local/tomcatA/webapps/test/WEB-INF/
# ls
classeslibweb.xml
#
# vim web.xml //任意位置加入下信息


    对于tomcatB来说
# cp ./web.xml /usr/local/tomcatA/webapps/test/WEB-INF/
# cd /usr/local/tomcatB/webapps/test/WEB-INF/
# ls
classeslibweb.xml
# vim web.xml //任意位置加入下信息。

   分别重新启动。
# ./catalina.sh stop
Using CATALINA_BASE:   /usr/local/tomcatB
Using CATALINA_HOME:   /usr/local/tomcatB
Using CATALINA_TMPDIR: /usr/local/tomcatB/temp
Using JRE_HOME:      /opt/jdk1.7.0_71/
Using CLASSPATH:       /usr/local/tomcatB/bin/bootstrap.jar:/usr/local/tomcatB/bin/tomcat-juli.jar
# ./catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcatB
Using CATALINA_HOME:   /usr/local/tomcatB
Using CATALINA_TMPDIR: /usr/local/tomcatB/temp
Using JRE_HOME:      /opt/jdk1.7.0_71/
Using CLASSPATH:       /usr/local/tomcatB/bin/bootstrap.jar:/usr/local/tomcatB/bin/tomcat-juli.jar
Tomcat started.
#
    重新启动,并且访问http://192.168.1.117/test

刷新页面

         

    将上面test应用定义成集群会话管理器,将下面文件拷贝到两个文件中
<cluster classname="org.apache.catalina.ha.tcp.SimpleTcpCluster" [="" font]
               channelSendOptions="8">

          <manager classname="org.apache.catalina.ha.session.DeltaManager" [="" font]
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

         
            <membership classname="org.apache.catalina.tribes.membership.McastService" [="" font]
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <receiver classname="org.apache.catalina.tribes.transport.nio.NioReceiver" [="" font]
                      address="auto"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            
            
            
            
            
         

          <valve classname="org.apache.catalina.ha.tcp.ReplicationValve" [="" font]
               filter=""/>
         

          <deployer classname="org.apache.catalina.ha.deploy.FarmWarDeployer" [="" font]
                  tempDir="/tmp/war-temp/"
                  deployDir="/tmp/war-deploy/"
                  watchDir="/tmp/war-listen/"
                  watchEnabled="false"/>

         
         
      
之后再次访问,会话保持

刷新一下,不难发现SessionID 没有变化。


页: [1]
查看完整版本: Apache负载均衡之mod_proxy模块实现