Apache+Tomcat 负载均衡 Session共享

一、本机环境

   1.Windows 7 32位操作系统

   2.java版本 "1.7"

   3.Apache安装包httpd-2.2.21-win32-x86-no_ssl.msi,默认安装

   4.tomcat7

   5.在一台机器上进行的

 

二、安装

   1.前提是Apache安装正确,启动正常

   2.解压缩多个tomcat,例如D:\Program Files\Apache Software Foundation

 

三、配置

   1.打开Apache根目录/conf/httpd.conf文件,找到如下信息,并将注释去掉,结果如下:

Xml代码   收藏代码
  1. LoadModule proxy_module modules/mod_proxy.so  
  2. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
  3. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
  4. LoadModule proxy_connect_module modules/mod_proxy_connect.so  
  5. LoadModule proxy_ftp_module modules/mod_proxy_ftp.so  
  6. LoadModule proxy_http_module modules/mod_proxy_http.so  
  7. Include conf/extra/httpd-vhosts.conf  

    2.在httpd.conf文件最后添加如下代码:

Xml代码   收藏代码
  1. ProxyRequests Off  
  2. <proxy balancer://cluster>  
  3.     BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1  
  4.     BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2          
  5.     #The below is the hot standby  
  6.     #BalancerMember ajp://127.0.0.1:9999 status=+H #此为备份服务器,只需添加status=+H  
  7.     #ProxySet lbmethod=bytraffic    
  8.  </proxy>  
 

    3.打开Apache根目录/conf/extra/httpd-vhosts.conf文件,找到下列文字并注释 ,如下:

Xml代码   收藏代码
  1. #<VirtualHost *:80>  
  2. #    ServerAdmin webmaster@dummy-host.sm.com  
  3. #    DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/docs/dummy-host.sm.com"  
  4. #   ServerName dummy-host.sm.com  
  5. #    ServerAlias www.dummy-host.sm.com  
  6. #    ErrorLog "logs/dummy-host.sm.com-error.log"  
  7. #    CustomLog "logs/dummy-host.sm.com-access.log" common  
  8. #</VirtualHost>  
  9.   
  10. #<VirtualHost *:80>  
  11. #    ServerAdmin webmaster@dummy-host2.sm.com  
  12. #    DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/docs/dummy-host2.sm.com"  
  13. #    ServerName dummy-host2.sm.com  
  14. #    ErrorLog "logs/dummy-host2.sm.com-error.log"  
  15. #    CustomLog "logs/dummy-host2.sm.com-access.log" common  
  16. #</VirtualHost>  

    4.在httpd-vhosts.conf文件最后加入如下代码 (域名与路径根据自己需要配置):

Xml代码   收藏代码
  1. <VirtualHost *:80>  
  2.     ServerAdmin test@qq.com  
  3.     ServerName localhost  
  4.     ServerAlias localhost  
  5.     ProxyPass / balancer://cluster/  
  6.     ProxyPassReverse / balancer://cluster/  
  7.     ErrorLog "logs/dummy-host2.sm.com-error.log"  
  8.     CustomLog "logs/dummy-host2.sm.com-access.log" common  
  9. </VirtualHost>  

    注意:此处 balancer://cluster与第二步< proxy balancer://cluster > 相对应

 

    5.配置tomcat,修改conf/server.xml文件(注:本示例中用了两台Tomcat服务器与多台配置是相同的 )

    修改第二个tomcat(两个tomcat任意设置一个)

Java代码   收藏代码
  1. <Server port="8005" shutdown="SHUTDOWN">  
  2. 8005改为9005  
  3.   
  4. <Connector port="8080" protocol="HTTP/1.1"   
  5.                connectionTimeout="20000"   
  6.                redirectPort="8443" />  
  7. 8080改为9080,将8443改为9443  
  8.   
  9. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
  10. 8009改为9009,将8443,改为9443  

    6.所有Tomcat均做以下修改(conf/server.xml):

    a.找到<Engine name="Catalina" defaultHost= "localhost" >增加 jvmRoute属性如下:

Xml代码   收藏代码
  1. <Engine name="Catalina" defaultHost="localhost"  jvmRoute="jvm2">  

    注意:jvmRoute属性值与第二步route=jvm*是相对应

 

    b.在<Engine name="." ..></Engine>标签中最后处添加以下代码:

    注意:对于这一步各个版本的Tomcat代码可能,具体可看http://localhost:8080/docs/cluster-howto.html

Xml代码   收藏代码
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.                  channelSendOptions="6">  
  3.   
  4.           <Manager className="org.apache.catalina.ha.session.BackupManager"  
  5.                    expireSessionsOnShutdown="false"  
  6.                    notifyListenersOnReplication="true"  
  7.                    mapSendOptions="6"/>  
  8.           <!--  
  9.           <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  10.                    expireSessionsOnShutdown="false"  
  11.                    notifyListenersOnReplication="true"/>  
  12.           -->  
  13.           <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  14.             <Membership className="org.apache.catalina.tribes.membership.McastService"  
  15.                         address="228.0.0.4"  
  16.                         port="45564"  
  17.                         frequency="500"  
  18.                         dropTime="3000"/>  
  19.             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  20.                       address="auto"  
  21.                       port="5000"  
  22.                       selectorTimeout="100"  
  23.                       maxThreads="6"/>  
  24.   
  25.             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  26.               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  27.             </Sender>  
  28.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  29.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  30.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>  
  31.           </Channel>  
  32.   
  33.           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  34.                  filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>  
  35.   
  36.           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  37.                     tempDir="/tmp/war-temp/"  
  38.                     deployDir="/tmp/war-deploy/"  
  39.                     watchDir="/tmp/war-listen/"  
  40.                     watchEnabled="false"/>  
  41.   
  42.           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  43.         </Cluster>  

    7.修改应用的web.xml,在<web-app>结束标签前追加 <distributable/>

    8.所有配置已经完毕,我们现在可以进行测试

    9.为了让效果更加明显,在各个Tomcat webapps\ROOT文件夹中添加index.jsp,代码如下:

Html代码   收藏代码
  1. <%@ page contentType="text/html; charset=GBK"%>  
  2. <%@ page import="java.util.*"%>  
  3. <html>  
  4. <head>  
  5. <title>Cluster App Test</title>  
  6. </head>  
  7. <body>  
  8. <%  
  9.     out.println("Server Info::"+request.getLocalAddr() + ":" + request.getLocalPort()+"</br>");  
  10.     String jsessionid = session.getId();  
  11.     out.println("SESSION ID::" + jsessionid+"</br>");  
  12.     // 如果有新的 Session 属性设置   
  13.     String dataName = request.getParameter("dataName");  
  14.     if (dataName != null && dataName.length() > 0) {  
  15.         String dataValue = request.getParameter("dataValue");  
  16.         session.setAttribute(dataName, dataValue);  
  17.     }  
  18.       
  19.     out.println("<b>SESSION ATTRIBUTES:</b></BR>");  
  20.     Enumeration<String> e = session.getAttributeNames();  
  21.     while (e.hasMoreElements()) {  
  22.         String name = (String) e.nextElement();  
  23.         String value = session.getAttribute(name).toString();  
  24.         out.println("&nbsp;&nbsp;&nbsp;"+name + " = " + value + "<br>");  
  25.         System.out.println(name + " = " + value);  
  26.     }  
  27.     out.println("Tomcat*");//Tomcat1、Tomcat2....  
  28. %>  
  29. <form action="<%=request.getContextPath() %>/index.jsp" method="POST">  
  30.        名称:<input type=text size=20 name="dataName"> <br>  
  31.        值:<input type=text size=20 name="dataValue"> <br>  
  32.    <input type=submit></form>  
  33. </body>  
 

    10.在浏览器中输入http://localhost,看看效果吧!刷新一下会有意外惊喜

 

    另可参考:http://www.cnblogs.com/sirc/archive/2011/05/17/2049307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值