tomcat+apache 集群配置

Apache2 + Tomcat6配置

1. 安装Apache和Tomcat,这里假定Apache2.2.3,Tomcat6.x

2. 修改/etc/httpd/conf/httpd.conf文件,确定以下行没有被注释掉

  LoadModule proxy_module modules/mod_proxy.so

  LoadModule proxy_http_module modules/mod_proxy_http.so

  LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

3. 添加以下行到/etc/httpd/conf/httpd.conf文件中

  ProxyPass /tomcat/ ajp://localhost:8009/

  ProxyPass /examples/ ajp://localhost:8009/examples/

  或者

  ProxyPass /tomcat/ http://localhost:8080/

  ProxyPass /examples/ http://localhost:8080/examples/

  这里假定Apache和Tomcat安装在一个机器上,否则修改以上localhost成Tomcat安装机器;

4. 启动Tomcat 和Apache,访问http://localhost/examples/


单机配置Tomcat Cluster

1. 下载并安装Tomcat,这里使用Tomcat的6.0.24版本;

2. 修改conf/server.xml文件,将其中<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>前后的注释打开保存;

3. 创建一个web app,这里为了简单使用tomcat自带的examples web app(webapps/examples),修改其中的WEB-INF/web.xml文件,在其中<display-name>Servlet and JSP Examples</display-name>节点后添加<distributable/>表明此应用与集群服务器复制Session;

4. 在examples目录下创建一个test.jsp文件,用来测试Cluster中两个Tomcat使用的Session是同一个Session,并且当其中一个Tomcat修改Session中的值时,第二个Tomcat会同样得到更新;代码如下:

[xhtml]  view plain  copy
 print ?
  1. <html>  
  2. <head>  
  3.     <title></title>  
  4. </head>  
  5. <body>  
  6. <%  
  7.     String mydata = request.getParameter("mydata");  
  8.     if (mydata != null && mydata.length() != 0) {  
  9.         session.setAttribute("mydata", mydata);  
  10.     }  
  11.       
  12.     out.println("request.getLocalAddr(): " + request.getLocalAddr());  
  13.     out.println("<br/>");  
  14.     out.println("request.getLocalPort(): " + request.getLocalPort());  
  15.     out.println("<br/>");  
  16.     out.println("Session ID: " + session.getId());  
  17.     out.println("<br/>");  
  18.       
  19.     out.println("mydata: " + session.getAttribute("mydata"));  
  20. %>  
  21. <form>  
  22.     <input type=text size=20 name="mydata">  
  23.     <br>  
  24.     <input type=submit>  
  25. </form>  
  26. </body>  
  27. </html>  
 

 

5. 复制此Tomcat(假定命名为Tomcat1)完整目录到别处(假定命名为Tomcat2),然后修改Tomcat2/conf/server.xml文件中的端口(8080 -> 9080,8009 -> 9009,8443 -> 9443) 

6. 启动Tomcat1和Tomcat2,然后分别访问http://localhost:8080/examples/test.jsp和http://localhost:9080/examples/test.jsp,会发现其中使用的Session ID是同一个Session ID,相应的修改其中一个的值,另外一个Tomcat Session中的值也会改变。


 

Apache2 + Tomcat6配置负载均衡


1. 安装Apache和Tomcat,这里假定Apache2.2.3,Tomcat6.x;且Apache安装在apachehost,tomcat分别安装在tomcathost1和tomcathost2上;
2. 修改/etc/httpd/conf/httpd.conf文件,确定以下行没有被注释掉
[python]  view plain  copy
 print ?
  1. LoadModule proxy_module modules/mod_proxy.so  
  2. LoadModule proxy_http_module modules/mod_proxy_http.so  
  3. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
 
3. 修改/etc/httpd/conf/httpd.conf文件,添加以下行:
[python]  view plain  copy
 print ?
  1. ProxyRequests off  
  2. <Proxy balancer://tccluster>  
  3.     BalancerMember http://tomcathost1:8080 loadfactor=2 route=tomcat1 max=150 smax=145  
  4.     BalancerMember http://tomcathost2:8080 loadfactor=1 route=tomcat2 max=150 smax=145  
  5.     Order Deny,Allow  
  6.     Allow from all  
  7.     #ProxySet lbmethod=byrequests|bytraffic|bybusyness  
  8. </Proxy>  
  9. <Location /balancer-manager>  
  10.     SetHandler balancer-manager  
  11.     Order Deny,Allow  
  12.     Allow from all  
  13. </Location>  
  14. <Location /examples>  
  15.     ProxyPass balancer://tccluster/examples stickysession=JSESSIONID  
  16.     ProxyPassReverse balancer://tccluster/examples  
  17.     Order Deny,Allow  
  18.     Allow from all  
  19. </Location>  
  
* 其中lbmethod配置说明:
lbmethod=byrequests 按请求次数均衡(默认)
lbmethod=bytraffic 按流量均衡 
lbmethod=bybusyness 按繁忙程度均衡(总是分配给活跃请求数最少的服务器)
* 其中BalancerMember配置中route=tomcat<ID>是下面在tomcat的server.xml配置中的jvmRoute值,这样配置如果两个tomcat都是可用的情况下,同一个浏览器过来的请求会被转发到同一个tomcat上。
4. 确定apachehost和两台tomcathost可以互访,并且两个tomcat机器在一个网段内;
5. 确定两台tomcat host多播已经打开,在Linux机器上可以使用cat /proc/net/dev_mcast检查,如果文件存在基本上就是打开了;另外确定两台tomcat机器的/etc/hosts文件中包含“xxx.xxx.xxx.xxx    hostname”比如“172.17.1.101    tomcathost1”或“172.17.1.102    tomcathost2”;
6. 修改两个tomcat的conf/server.xml文件,对Engine节点分别添加jvmRoute="tomcat1"和jvmRoute="tomcat2",并添加以下内容:
[xhtml]  view plain  copy
 print ?
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"   
  2.     channelSendOptions="6">  
  3.       
  4.       
  5.     <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  6.         expireSessionsOnShutdown="false"  
  7.         notifyListenersOnReplication="true"/>  
  8.     <!--  
  9.     <Manager className="org.apache.catalina.ha.session.BackupManager"  
  10.         expireSessionsOnShutdown="false"  
  11.         notifyListenersOnReplication="true"  
  12.         mapSendOptions="6"/>  
  13.     -->  
  14.     <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  15.         <Membership className="org.apache.catalina.tribes.membership.McastService"  
  16.             address="228.0.0.5"  
  17.             port="45564"  
  18.             frequency="500"  
  19.             dropTime="3000"/>  
  20.         <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  21.             address="auto"  
  22.             port="4000"  
  23.             selectorTimeout="100"  
  24.             maxThreads="6"/>  
  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.     </Channel>  
  31.     <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*/.gif;.*/.js;.*/.jpg;.*/.png;.*/.htm;.*/.html;.*/.css;.*/.txt;"/>  
  32.       
  33.     <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  34.     <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  35. </Cluster>  
 
7. 创建一个web app,这里为了简单使用tomcat自带的examples web app(webapps/examples),修改其中的WEB-INF/web.xml文件,在其中<display-name>Servlet and JSP Examples</display-name>节点后添加<distributable/>表明此应用与集群服务器复制Session;
8. 在两个Tomcat的webapps/examples目录下各创建一个test.jsp文件,用来测试Cluster中两个Tomcat的Session复制,代码如下:
[xhtml]  view plain  copy
 print ?
  1. <html>  
  2. <head>  
  3.     <title></title>  
  4. </head>  
  5. <body>  
  6. <%  
  7.     String mydata = request.getParameter("mydata");  
  8.     if (mydata != null && mydata.length() != 0) {  
  9.         session.setAttribute("mydata", mydata);  
  10.     }  
  11.       
  12.     out.println("request.getLocalAddr(): " + request.getLocalAddr());  
  13.     out.println("<br/>");  
  14.     out.println("request.getLocalPort(): " + request.getLocalPort());  
  15.     out.println("<br/>");  
  16.     out.println("Session ID: " + session.getId());  
  17.     out.println("<br/>");  
  18.       
  19.     out.println("mydata: " + session.getAttribute("mydata"));  
  20. %>  
  21. <form>  
  22.     <input type=text size=20 name="mydata">  
  23.     <br>  
  24.     <input type=submit>  
  25. </form>  
  26. </body>  
  27. </html>  
 
9. 启动Tomcat和Apache,访问http://apachehost/examples/,可以修改其中Session中的值,并且可以看到两个tomcat的Session中的值是一样的;
10. 访问http://apachehost/balancer-manager,可以使用此负载均衡管理页面来动态enable/disable其中的某个tomcat。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值