`

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. <!-- 这里删除注释的终止标志 -->  
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. <!-- 这里删除注释的终止标志 -->  
<Server port="8005" shutdown="SHUTDOWN">
....
<Connector port="8080" maxHttpHeaderSize="8192"
....
<Connector port="8009"
........
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
....
<!-- 这里删除注释的起始标志 -->
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
  ........
            <Receiver 
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="192.168.0.1"
                tcpListenPort="4001"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>
........
        </Cluster>
<!-- 这里删除注释的终止标志 -->



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. <!-- 这里删除注释的终止标志 -->  
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. <!-- 这里删除注释的终止标志 -->  
<Server port="9005" shutdown="SHUTDOWN">
....
<Connector port="9080" maxHttpHeaderSize="8192"
....
<Connector port="9009"
........
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
....
<!-- 这里删除注释的起始标志 -->
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
  ........
            <Receiver 
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="192.168.0.1"
                tcpListenPort="4002"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>
........
        </Cluster>
<!-- 这里删除注释的终止标志 -->



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. <!-- 这里删除注释的终止标志 -->  
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. <!-- 这里删除注释的终止标志 -->  
<Server port="9006" shutdown="SHUTDOWN">
....
<Connector port="9088" maxHttpHeaderSize="8192"
....
<Connector port="9019"
........
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat3">
....
<!-- 这里删除注释的起始标志 -->
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
  ........
            <Receiver 
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="192.168.0.1"
                tcpListenPort="4003"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>
........
        </Cluster>
<!-- 这里删除注释的终止标志 -->



7 测试用的程序
使用了网上普遍采用的一段代码
webapps/test/index.jsp

  1.     
  2. <%@ page c %>   
  3. <%@ page import="java.util.*" %>   
  4. <html><head><title>Cluster App Test</title></head>   
  5. <body>   
  6. Server Info:   
  7. <%   
  8. System.out.println("================");   
  9. out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>   
  10. <%   
  11.   out.println("<br> ID " + session.getId()+"<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.   out.print("<b>Session 列表</b>");   
  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+"<br>");   
  24.          System.out.println( name + " = " + value);   
  25.    }   
  26. %>   
  27.   <form action="index.jsp" method="POST">   
  28.     名称:<input type=text size=20 name="dataName">   
  29.      <br>   
  30.     值:<input type=text size=20 name="dataValue">   
  31.      <br>   
  32.     <input type=submit>   
  33.    </form>   
  34. </body>   
  35. </html>  
Java代码 复制代码
  1.     
  2. <%@ page c %>   
  3. <%@ page import="java.util.*" %>   
  4. <html><head><title>Cluster App Test</title></head>   
  5. <body>   
  6. Server Info:   
  7. <%   
  8. System.out.println("================");   
  9. out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>   
  10. <%   
  11.   out.println("<br> ID " + session.getId()+"<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.   out.print("<b>Session 列表</b>");   
  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+"<br>");   
  24.          System.out.println( name + " = " + value);   
  25.    }   
  26. %>   
  27.   <form action="index.jsp" method="POST">   
  28.     名称:<input type=text size=20 name="dataName">   
  29.      <br>   
  30.     值:<input type=text size=20 name="dataValue">   
  31.      <br>   
  32.     <input type=submit>   
  33.    </form>   
  34. </body>   
  35. </html>  
 
<%@ page c %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
System.out.println("================");
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
  out.println("<br> ID " + session.getId()+"<br>");
  // 如果有新的 Session 属性设置
  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="index.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>


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 App</display-name>  
  8.   <description>  
  9.     Tomcat Simple Load Balancer Example App   
  10.   </description>  
  11.   <distributable/>  
  12. </web-app>  
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 App</display-name>  
  8.   <description>  
  9.     Tomcat Simple Load Balancer Example App   
  10.   </description>  
  11.   <distributable/>  
  12. </web-app>  
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  <display-name>Tomcat Simple Load Balancer Example App</display-name>
  <description>
    Tomcat Simple Load Balancer Example App
  </description>
  <distributable/>
</web-app>


其中的 distributable 是关键

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

分享到:
评论

相关推荐

    apache+tomcat+jk 均衡负载和集群

    Apache+Tomcat+JK是一个常见的Web服务器和应用服务器集群解决方案,用于实现负载均衡和高可用性。这个配置中,Apache作为前端反向代理服务器,Tomcat作为后端的应用服务器,而JK模块是Apache与Tomcat之间的连接器,...

    Apache+Tomcat负载均衡与集群配置详解

    配置Apache+Tomcat负载均衡集群,我们需要以下软件和硬件环境: - **软件**: - JRE(JDK)6u3:用于Java应用程序的运行。 - Tomcat 6.0.14:Web应用服务器。 - Apache 2.2.6:作为负载均衡器。 - mod_jk-2.2.4...

    apache+tomcat负载均衡_proxy模式

    内附完整配置教程和修改后的apache的httpd.conf文件和tomcat的server.xml配置文件,包含test测试项目,不包含apache和tomcat安装文件。 本教程参考网上资料,本机测试成功,如有问题可以私信说明。

    Mod_Proxy+Apache+Tomcat负载均衡与集群配置

    在当今的企业级应用中,确保系统的高可用性和稳定性是至关重要的。这通常通过建立集群来实现,即通过部署多台服务器来提供相同的服务,以此来...这样,就完成了整个Mod_Proxy+Apache+Tomcat负载均衡与集群的配置过程。

    Apache+tomcat负载均衡

    在这个配置中,`&lt;Proxy&gt;`指令定义了一个名为"mycluster"的负载均衡集群,包含两个成员(t1和t2),分别对应本地和另一台服务器上的Tomcat实例。`lbmethod=byrequests`表示按请求数进行负载分配。`ProxyPass`和`...

    Apache+Tomcat+JK 实现集群负载均衡文档

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    jk+apache+tomcat整合 负载均衡 集群

    jk+apce+tomcat 整合 实现tomcat负载均衡 tomcat集群。让tomcat处理.jsp动态页面,apache处理静态页面。平且实现在一个IP下提供多个站点服务。 里面包括怎样配置apache虚拟机文件 怎样配置tomcat的虚拟机文件 花了我...

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    apache + tomcat 负载均衡worker模式初探

    阅读这份手册可以帮助你深入理解Apache + Tomcat负载均衡worker模式的配置和管理,确保系统稳定高效地运行。 总的来说,Apache + Tomcat的负载均衡worker模式通过合理调度请求,能够有效地提升服务的可用性和响应...

    Apache的Tomcat负载均衡和集群(linux,centos)

    Apache 的 Tomcat 负载均衡和集群 ( linux, centos) jkmod

    apache+tomcat负载均衡整合文档

    以下是实现Apache+Tomcat负载均衡整合的详细步骤: 1. **安装与配置Apache**: - 安装Apache HTTP服务器,并确保已启用mod_proxy、mod_proxy_balancer和mod_proxy_http模块。这些模块通常在默认的Apache安装中已经...

    apache+tomcat负责均衡和集群配置手册

    本文将深入解析如何通过配置Apache和Tomcat实现负载均衡和集群化,从而提升系统的稳定性和响应速度。 #### 一、准备工作 首先,我们需要准备必要的软件: - **Apache**: 下载适合Windows平台的Apache安装包`...

    反向代理负载均衡 Apache + Tomcat集群

    反向代理负载均衡 Apache + Tomcat集群 多的我也不多说了 看文档

    Apache+Tomcat+Linux集群和负载均衡

    ### Apache+Tomcat+Linux集群和负载均衡 在IT领域,Apache+Tomcat+Linux集群与负载均衡技术是实现...通过以上步骤,我们可以成功搭建一套基于Apache+Tomcat+Linux的负载均衡集群环境,有效提升Web应用的性能和稳定性。

    Nginx+Tomcat负载均衡企业实战.docx

    Nginx+Tomcat负载均衡企业实战.docx 本文档主要介绍了 Nginx+Tomcat 负载均衡的企业实战,涵盖了从0开始构建 Nginx WEB 平台、Tomcat WEB 集群、代码发布、Nginx 负载均衡 Tomcat 集群、动静分离、Rewrite 实战等...

    Apache Tomcat 负载均衡

    Apache Tomcat负载均衡是分布式系统中关键的一环,旨在通过分散服务器请求,提高系统的可用性和响应速度,同时增强系统的容错能力。本文将基于提供的文件信息,深入解析Apache Tomcat负载均衡的配置与实现机制。 ##...

    Apache+Tomcat服务器集群配置详细步骤

    - 在`&lt;apache_home&gt;/conf`目录下创建`workers.properties`文件,定义负载均衡策略和Tomcat服务器信息: ```properties # 定义worker列表 worker.list=worker1,worker2,loadbalancer # worker1配置 worker.worker1....

Global site tag (gtag.js) - Google Analytics