tomcat+apach load balance

本文主要参考自http://www.iteye.com/topic/985404?dhcc,经由实际操作配置操并记录而成。

一、环境和版本
        环境:主机----Windows7(本地localhost);
        版本:JDK----1.5.0_22(安装版); Tomcat39----6.0.39(安装版);Tomcat32----6.0.32(安装版)Apache----2.2.25(httpd-2.2.25-win32-x86-no_ssl.msi,安装版)
二、apache tomcat配置操作
       1、Apache----2.2.25版本已经集成了mod_jk功能,故不必配置繁琐的worker.properties文件什么的,配置过程很方便了。
        2、利用编辑器打开APACHE_HOME\conf\httpd.conf文件,找到如下代理块(proxy):
             #LoadModule proxy_module modules/mod_proxy.so
             #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
             #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
             #LoadModule proxy_connect_module modules/mod_proxy_connect.so
             #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
             #LoadModule proxy_http_module modules/mod_proxy_http.so
        3、去掉这些代理块的注释“#”符号,Apache在启动的过程中将加载上述代理(proxy)。
        4、文件结束处添加如下代码:
             ProxyRequests Off
             <proxy balancer://cluster>
                    BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1
                    BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2
             </proxy>
        5、找到#Include conf/extra/httpd-vhosts.conf位置,并去掉“#”符号。
        6、利用编辑器打开APACHE_HOME\conf\extra\httpd-vhosts.conf文件,配置虚拟站点,在文件结束添加
        <VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName localhost
   ServerAlias localhost
   ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
   ProxyPassReverse / balancer://cluster/
   ErrorLog "logs/error.log"
   CustomLog "logs/access.log" common
         </VirtualHost>
        7、配置Tomcat----server.xml文件
        7.1、如果是2个Tomcat处于不同的机器上,就不需要修改任何端口;只是需要把<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">注释符放开,同时将<Engine name="Catalina" defaultHost="localhost">注释掉;
        7.2、对于tomcat在同一部机器的情况,将其中tomcat39的<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">改为<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
        7.3 将tomcat39的<Server port="8005" shutdown="SHUTDOWN">
            <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
            <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"
               redirectPort="8443" />
            8005改为9005,8009改为9009,8080改为9080
            9009端口对应 Apache httpd.conf中BalancerMember中配置的ajp连接端口。
        7.4、将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释放开,目的是可以在集群中的所有tomcat节点间共享会话(Session)。
三、新建测试web project
        1、在此引用一个网络上的测试session的例子:
       <%@ page contentType="text/html; charset=GBK" %> 
       <%@ page import="java.util.*" %> 
       <html><head><title>Cluster App Test</title></head> 
       <body> 
        Server Info: 
       <% 
         out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> 
       <% 
         out.println("<br> ID " + session.getId()+"<br>"); 
         String dataName = request.getParameter("dataName"); 
  
         if (dataName != null && dataName.length() > 0) { 
            String dataValue = request.getParameter("dataValue"); 
            session.setAttribute(dataName, dataValue); 
         }  
         out.print("<b>Session 列表</b>");  
  
         Enumeration e = session.getAttributeNames(); 
         while (e.hasMoreElements()) { 
            String name = (String)e.nextElement(); 
            String value = session.getAttribute(name).toString(); 
            out.println( name + " = " + value+"<br>"); 
               System.out.println( name + " = " + value); 
         } 
      %> 
          <form action="test.jsp" method="POST"> 
            名称:<input type=text size=20 name="dataName"> 
            <br> 
            值:<input type=text size=20 name="dataValue"> 
            <br> 
            <input type=submit> 
          </form> 
        </body> 
      </html>

        2、myeclipse new 一个web project 在WebRoot下面新建一个test.jsp,内容为上面的代码,在WebRoot\WEB-INF\web.xml 的<web-app>节点下加入<distributable />通知Tomcat在当前应用集群中的所有节点间实现Session共享。
        3、在两个TOMCAT_HOME\conf\server.xml的<Host></Host>之间添加<Context   path="/test"   docBase="D:\workspace\testLoadBlance\WebRoot"   reloadable="true"   debug="0"></Context>
四、测试load balance
        1、启动tomcat39,tomcat32,apache,在浏览器中输入http://localhost/test/test.jsp,每刷新一次apache都会将请求发送到不同的tomcat中。
        2、通过在jvm1中提交名称和值后刷新到jvm2可以看到jvm1提交的值,反之亦然,说明load balance并且共享session目的达到。
五、存在的问题
        1、用tomcat7时session无法共享。
       
      

猜你喜欢

转载自leoric.iteye.com/blog/2019338