apache和tomcat群集

httpd.conf
    httpd.conf中添加:
    #与tomcat的插件
    include "D:clusterServerapacheconfmod_jk.conf

mod_jk.conf
    在apache的conf文件夹中创建mod_jk.conf文件,并添加以下内容:
        LoadModule jk_module modules/mod_jk.so
        JkWorkersFile conf/workers.properties
        #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名
        JkMount /*.jsp controller

    
复制插件文件mod_jk.so到apache的modules文件夹中

workers.properties
    新建并编辑workers.properties文件,内容如下:
        worker.list = controller

        #========tomcat1========
        worker.tomcat1.port=11009
        worker.tomcat1.host=localhost
        worker.tomcat1.type=ajp13
        worker.tomcat1.lbfactor = 1

        #========tomcat2========
        worker.tomcat2.port=12009
        worker.tomcat2.host=localhost
        worker.tomcat2.type=ajp13
        worker.tomcat2.lbfactor = 1

        #========controller,负载均衡控制器========
        worker.controller.type=lb
        worker.controller.balanced_workers=tomcat1,tomcat2
        #      true:不进行回话复制,使用相同的tomcat处理回话;        false:回话进行复制,一台tomcat当掉,另一台也可持续访问
        worker.controller.sticky_session=false
        #ture:当一台tomcat访问没有反馈的时候,转换到另一台tomcat处理
        worker.controller.sticky_session_force=1


server.xml
    tomcat配置文件:server.xml

        修改server.xml文件相关的端口信息,若在同一台机器上部署多个tomcat,请确保多个tomcat能够同时启动。

        Engine节点添加jvmRoute属性,属性的值要与apache中的配置文件workers.properties中的worker.controller.balanced_workers值中的一个。


        Connector节点的port属性要与apache中的配置文件workers.properties中worker.tomcat1.port值一致。


        去掉Engine节点以下配置信息的注释:
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
        说明:
            其实这只是对Cluster的最简单的一种配置,该配置下tomcat使用的是all-to-all方式的session同步,这种方式只适用于小规模的集群,即,session复制。
            tomcat另外一种session共享方式,只需为Cluster配置BackupManager即可,参看http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html

web.xml
    web工程的web.xml中添加以下配置信息:(属性告诉servlet/JSP容器,编写的应用将在分布式Web容器中部署)
        <distributable/>

测试用jsp文件:       

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

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.println("<b>Session 列表</b><br>");

  System.out.println("============================");

  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>


==================================================================================================
常见问题:

1、  如果同一台机器上的节点之间session能够同步,但是不同机器间的session无法同步,可能的原因是机器间的时钟不同步,需要进行同步操作。        
2、  关于jvmRoute。
前面实验中的sessionid由两部分组成(前缀+后缀),而其后缀名就是jvmRoute配置的名称,mod_jk需要根据这个后缀名进行请求转发:当sticky_session=1时,mod_jk根据这个后缀名来判断该会话应该始终由哪个tomcat进行处理。


        
参考书目:
Professional.Apache.Tomcat6    
        
        
参考文档:
http://hi.baidu.com/wudengke213/item/5f63b016921850cc38cb306e
http://www.360doc.com/content/12/0404/19/9350055_200808330.shtml

原文地址:https://www.cnblogs.com/kszit/p/3613838.html