当前位置: > Linux服务器 > Tomcat >

基于mod_proxy+Apache 2.2.16+Tomcat 7的负载均衡与集群配置(二)

时间:2015-01-14 14:24来源:linux.it.net.cn 作者:IT
第五章. 集群测试 
1. tomcat7_a和tomcat7_b的cluster工程中分别添加测试文件:testCluster.jsp 

 
  1. <span style="font-family:宋体;font-size:13px;"><%@ page contentType="text/html; charset=GBK" %>  
  2. <%@ page import="java.util.*" %>  
  3. <html><head><title>Cluster Test</title></head>  
  4. <body>  
  5. <%  
  6.   //HttpSession session = request.getSession(true);  
  7.   System.out.println(session.getId());  
  8.   out.println("<br> SESSION ID:" + session.getId()+"<br>");    
  9.   // 如果有新的请求,则添加session属性  
  10.   String name = request.getParameter("name");  
  11.   if (name != null && name.length() > 0) {  
  12.      String value = request.getParameter("value");  
  13.      session.setAttribute(name, value);  
  14.   }    
  15.  out.print("<b>Session List:</b>");    
  16.  Enumeration<String> names = session.getAttributeNames();  
  17.  while (names.hasMoreElements()) {  
  18.   String sname = names.nextElement();   
  19.   String value = session.getAttribute(sname).toString();  
  20.   out.println( sname + " = " + value+"<br>");  
  21.         System.out.println( sname + " = " + value);  
  22.    }  
  23. %>  
  24.   <form action="testCluster.jsp" method="post">  
  25.     名称:<input type=text size=20 name="name">  
  26.      <br>  
  27.     值:<input type=text size=20 name="value">  
  28.      <br>  
  29.     <input type=submit value="提交">  
  30.    </form>  
  31. </body>  
  32. </html></span>  
2. 启动tomcat7_a,启动完毕后,启动tomcat7_b
3. 进入http://localhost:8081/cluster/testCluster.jsp 对应tomcat7_a(8081),登录几次,可看到 
4. 另外打开一个浏览器,进入http://localhost:8082/cluster/testCluster.jsp对应tomcat7_b(8082),登录name:tomcat_b,value:b value可看到
5. 刷新tomcat7_a(8081)相关页面,可以看到从tomcat7_b提交的值session同步过来了,说明集群成功。 

第六章. Session集群工作步骤 
参照tomcat7 doc: 
To make it easy to understand how clustering works, We are gonna take you through a series of scenarios. In the scenario we only plan to use two tomcat instances TomcatA and TomcatB. We will cover the following sequence of events:
1. TomcatA starts up 
2. TomcatB starts up (Wait that TomcatA start is complete) 
3. TomcatA receives a request, a session S1 is created. 
4. TomcatA crashes 
5. TomcatB receives a request for session S1 
6. TomcatA starts up 
7. TomcatA receives a request, invalidate is called on the session (S1) 
8. TomcatB receives a request, for a new session (S2) 
9. TomcatA The session S2 expires due to inactivity. 

第七章. 负载均衡配置 
Tomcat有两种负载均衡的方式: 
1. 使用 JK1.2.x native connector 
2. 使用Apache HTTP Server 2.x with mod_proxy 
我们使用的是mod_proxy,在Apache Http Server2.2以上版本已经自动带有: 
Mod_proxy supports either HTTP or AJP load balancing. 我们通过ajp方式。 

详细查看:tomcat7\webapps\docs\balancer-howto.html 
1. 首先,监听8000端口, 在Apache安装目录下找到conf/httpd.conf文件 
稍前面加上 

Java代码 

 
  1. <span style="font-family:宋体;font-size:13px;"># 监听端口和监听地址  
  2. Listen 8000</span>  

2. conf/httpd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。
Java代码 

 
  1. <span style="font-family:宋体;font-size:13px;">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 </span>  


3. conf/httpd.conf文件最后加上:  

 
  1. <span style="font-family:宋体;font-size:13px;">#虚拟机配置,负载均衡配置  
  2. <VirtualHost *:8000>  
  3.  ServerAdmin weigbo@163.com  
  4.  ServerName localhost  
  5.  ServerAlias localhost  
  6.  #小心,有些地方要有空格,要不然会出错哈哈。  
  7.  ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On  
  8.  ProxyPassReverse / balancer://cluster/  
  9.  #ErrorLog "logs/error.log"  
  10.  #CustomLog "logs/access.log" common  
  11. </VirtualHost>   
  12.   
  13. #The ProxyRequests directive should usually be set off when using ProxyPass.  
  14. ProxyRequests Off  
  15. <proxy balancer://cluster>  
  16.  BalancerMember ajp://localhost:8009 loadfactor=1 route=tomcat7_a  smax=5 max=20 ttl=120 retry=300 timeout=15  
  17.  BalancerMember ajp://localhost:9009 loadfactor=1 route=tomcat7_b  smax=5 max=20 ttl=120 retry=300 timeout=15  
  18.  # status=+H为配置热备,当所有机器都over时,才会请求该机器  
  19.  #BalancerMember http://192.168.1.218:8009 status=+H  
  20.  ProxySet lbmethod=bytraffic  
  21. </proxy></span>  
4. Tomcat7配置(server.xml):
因为是同一机器,两个应用,所以配不同的端口,不同机器则不用配,要和前面的ajp对应上。 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />

第八章. 负载均衡测试 
Tomcat7_a的cluster工程的测试文件:testCluster.jsp加上html代码: 
<b>负载均衡测试:此为:Tomcat7_a上的文件,<font color=red>aaaaaaaaaaaaaaaaaa</font><b> 

Tomcat7_b的cluster工程的测试文件:testCluster.jsp加上html代码 
<b>负载均衡测试:此为:Tomcat7_b上的文件,<font color=red>bbbbbbbbbbbbbbbbbb</font><b> 

打开浏览器,进入地址:http://localhost:8000/cluster/testCluster.jsp 
多刷新几次,会看到页面值会在aaaaa和bbbbb间切换,说明负载均衡配置成功。


第九章. Mod_proxy负载均衡算法 
目前mod_proxy有3种负载均衡算法: 
1. Request Counting(我猜是Round-robin), lbmethod=byrequests 
2. Weighted Traffic Counting(这个是按权重,此例也是用此算法), lbmethod=bytraffic 
3. Pending Request Counting(从apche文档来看,应该是按负载量,也就是往负载少的派发新请求). lbmethod=bybusyness
它们通过lbmethod值设置。 
第十章. 参考文档: 
Tomcat 7 doc文档 
http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html 
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html 

第十一章. 补充内容:负载均衡管理器 
负载均衡管理器可以动态更新负载均衡的应用,你可以用管理器更改负载因子或者特定的应用,还可以把应用设为off模式。 
为了使用balancer management, mod_status和mod_proxy_balancer 必需要加载到apache. 
设置: 
#此项为mod_proxy_balancer管理器需要 
LoadModule status_module modules/mod_status.so 

在负载均衡项前加上: 
#mod_balancer管理应用 
<Location /balancer-manager>   
     SetHandler balancer-manager 
     Order Allow,Deny 
     Allow from all 
</Location> 

可以通过以下地址访问:http://localhost:8000/balancer-manager

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容