apache和tomcat群集

httpd.conf
    httpd.conf中添加:
    #与tomcat的插件
    include "D:\clusterServer\apache\conf\mod_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文件:       

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<%@ 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

posted @   kszit  阅读(195)  评论(0编辑  收藏  举报
编辑推荐:
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
阅读排行:
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?
点击右上角即可分享
微信分享提示