Apache+Tomcat负载均衡和集群的尝试

1 各软件版本
Apache 2.2.4 因为jd_mod 用的是2.2.4的,所以这里也用这个版本,以免有问题
Tomcat 5.5.26
jd-mod: mod_jk-1.2.26-httpd-2.2.4.so

2 配置Apache
引用:

LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile D:/Apache2.2/conf/workers.properties
JkLogFile d:/Apache2.2/logs/mod_jk.log
JkLogLevel info
#JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /servlet/* myloadbalancer
JkMount /*.jsp myloadbalancer


3 workers.properties
引用:
worker.list=myloadbalancer

worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8009
worker.tomcat1.lbfactor=1

worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=9009
worker.tomcat2.lbfactor=1

worker.tomcat3.type=ajp13
worker.tomcat3.host=localhost
worker.tomcat3.port=9019
worker.tomcat3.lbfactor=1

worker.myloadbalancer.type=lb
worker.myloadbalancer.balance_workers=tomcat1,tomcat2,tomcat3
worker.myloadbalancer.sticky_session=false


使用了3个tomcat,其侦听端口分别为 8009,9009和9019
worker.myloadbalancer.sticky_session=false 声明即使是同一个SESSIONID,也不用同一个Worker进行处理,这样更有利于负载均衡。
如果为true,则如果SESSIONID相同,则会自动使用上一次对应的worker

4 apache-tomcat-5.5.26-1/conf/server.xml
查看 复制到剪切板 打印
  1. <Server port="8005" shutdown="SHUTDOWN">  
  2. ....   
  3. <Connector port="8080" maxHttpHeaderSize="8192"  
  4. ....   
  5. <Connector port="8009"  
  6. ........   
  7. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">  
  8. ....   
  9.   
  10. <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"  
  11.   ........   
  12.             <Receiver    
  13.                 className="org.apache.catalina.cluster.tcp.ReplicationListener"  
  14.                 tcpListenAddress="192.168.0.1"  
  15.                 tcpListenPort="4001"  
  16.                 tcpSelectorTimeout="100"  
  17.                 tcpThreadCount="6"/>  
  18. ........   
  19.         Cluster>  
  20.   


5 apache-tomcat-5.5.26-2/conf/server.xml
查看 复制到剪切板 打印
  1. <Server port="9005" shutdown="SHUTDOWN">  
  2. ....   
  3. <Connector port="9080" maxHttpHeaderSize="8192"  
  4. ....   
  5. <Connector port="9009"  
  6. ........   
  7. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">  
  8. ....   
  9.   
  10. <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"  
  11.   ........   
  12.             <Receiver    
  13.                 className="org.apache.catalina.cluster.tcp.ReplicationListener"  
  14.                 tcpListenAddress="192.168.0.1"  
  15.                 tcpListenPort="4002"  
  16.                 tcpSelectorTimeout="100"  
  17.                 tcpThreadCount="6"/>  
  18. ........   
  19.         Cluster>  
  20.   


6 apache-tomcat-5.5.26-3/conf/server.xml
查看 复制到剪切板 打印
  1. <Server port="9006" shutdown="SHUTDOWN">  
  2. ....   
  3. <Connector port="9088" maxHttpHeaderSize="8192"  
  4. ....   
  5. <Connector port="9019"  
  6. ........   
  7. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat3">  
  8. ....   
  9.   
  10. <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"  
  11.   ........   
  12.             <Receiver    
  13.                 className="org.apache.catalina.cluster.tcp.ReplicationListener"  
  14.                 tcpListenAddress="192.168.0.1"  
  15.                 tcpListenPort="4003"  
  16.                 tcpSelectorTimeout="100"  
  17.                 tcpThreadCount="6"/>  
  18. ........   
  19.         Cluster>  
  20.   


7 测试用的程序
使用了网上普遍采用的一段代码
webapps/test/index.jsp
查看 复制到剪切板 打印
  1.     
  2. <%@ page c %>   
  3. <%@ page import="java.util.*" %>   
  4. Cluster App Test   
  5.   
  6. Server Info:   
  7. <%   
  8. System.out.println("================");   
  9. out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
    "
    );%>   
  10. <%   
  11.   out.println("
     ID "
     + session.getId()+"
    "
    );   
  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.   out.print("Session 列表");   
  19.   Enumeration e = session.getAttributeNames();   
  20.   while (e.hasMoreElements()) {   
  21.      String name = (String)e.nextElement();   
  22.      String value = session.getAttribute(name).toString();   
  23.      out.println( name + " = " + value+"
    "
    );   
  24.          System.out.println( name + " = " + value);   
  25.    }   
  26. %>   
  27.   "index.jsp" method="POST">   
  28.     名称:20 name="dataName">   
  29.      
      
  30.     值:20 name="dataValue">   
  31.      
      
  32.        
  33.       
  34.   
  35.   

webapps/test/WEB-INF/web.xml
查看 复制到剪切板 打印
  1.     
  2. xml version="1.0" encoding="ISO-8859-1"?>  
  3. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
  6.     version="2.4">  
  7.   <display-name>Tomcat Simple Load Balancer Example Appdisplay-name>  
  8.   <description>  
  9.     Tomcat Simple Load Balancer Example App   
  10.   description>  
  11.   <distributable/>  
  12. web-app>  

其中的 distributable 是关键

8 遇到的问题
1)启动时产生 Error receiving mcast package
经测试发现,我用的ADSL,如果我联网,则会报这个异常,如果断网则不会产生。看来那个
tcpListenAddress="192.168.0.1"
需要使用外网的IP地址才可以。
2)启动异常,一般是端口被占用
请仔细看各个server.xml配置文件,各个端口不能相同

你可能感兴趣的:(tomcat,tomcat,负载均衡,apache,string,session,encoding)