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文件:

<%@ 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

apache和tomcat群集的更多相关文章

  1. apache与tomcat负载集群集成方法配置

    apache与tomcat负载集群集成方法有3种jk.jk_proxy.http_proxy apache:httpd-2.2.17-win32-x86-no_ssl.msi tomcat:apach ...

  2. apache和tomcat有什么不同,为什么要整合apache 和tomcat

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Ap ...

  3. apache与tomcat负载集群的3种方法

    花了两天时间学习apache与tomcat的集成方法,现在把学习成果记录下来. apache与tomcat负载集群集成方法有3种jk.jk_proxy.http_proxy 本次集成使用的软件版本: ...

  4. Apache、Tomcat、JBoss、Weblogic四个常用的JavaEE服务器

    Apache全球应用最广泛的http服务器,免费,出自apache基金组织 Tomcat应用也算非常广泛的web 服务器,支持部分j2ee,免费,出自 apache基金组织 JBoss开源的应用服务器 ...

  5. Apache和Tomcat整合(一个Apache 不同域名处理多个不同业务)

    一.简介 在项目中,几乎任何一个项目都包括静态资源和动态请求两大部分.特别对于门户网站这样的项目,静态内容资源会更多,我们使用一般的 Tomcat 部署时,Tomcat 对静态资源的处理能力比较慢,至 ...

  6. 为什么要整合apache 和tomcat?

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...

  7. apache与tomcat的区别

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...

  8. Tomcat集群搭建超详细(apache+mod_jk+tomcat)

    TOMCAT集群 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHE+TO ...

  9. debian下Apache和tomcat整合(使用apt工具)

    最近部署web系统,需要使用tomcat处理和Apache整合使用,tomcat处理JSP,Apache处理静态资源.开始不知道怎么操作,在网上查阅资料走了很多弯路.完成时候,发现其实很简单,现将配置 ...

随机推荐

  1. gulp批量添加版本号

    要实现的理想效果: "/css/style.css" => "/dist/css/style.css?v=1d87bebe""/js/scrip ...

  2. python作业:模拟登陆(第一周)

    模拟登陆作业需求: 1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户 额外实现功能: 1.提示输入错误次数 2.输入已锁定用户会提示 3.用户不存在会提 ...

  3. 团队冲刺Alpha(七)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  4. C# 命名管道

    有些场合需要高效率,进行线程间通信,可以使用 C#命名管道.

  5. 201621123034 《Java程序设计》第13周学习总结

    作业13-网络 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以 ...

  6. 安装bcc

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D4284CDD echo "deb https://repo.i ...

  7. HDU - 5919 Sequence II

    题意: 给定长度为n的序列和q次询问.每次询问给出一个区间(L,R),求出区间内每个数第一次出现位置的中位数,强制在线. 题解: 用主席树从右向左的插入点.对于当前点i,如果a[i]出现过,则把原位置 ...

  8. [SDOI2015][bzoj3990] 序列 [搜索]

    题面 传送门 思路 首先,这道题目有一个非常显然(但是我不会严格证明,只能意会一下)的结论:一个合法的操作序列中,任意两个操作是可以互换的 那么,这个结论加上本题极小的数据范围,为什么不搜索一下呢? ...

  9. POJ 3348 Cows | 凸包模板题

    题目: 给几个点,用绳子圈出最大的面积养牛,输出最大面积/50 题解: Graham凸包算法的模板题 下面给出做法 1.选出x坐标最小(相同情况y最小)的点作为极点(显然他一定在凸包上) 2.其他点进 ...

  10. JS DOM对象与jQuery对象的转换

    JS转jQuery // 直接用$()来包裹 如同$(this) $(document) var jsObj = document.getElementById('test'); var jquery ...