通过ajp_proxy配置Apache+Tomcat集成

一、安装Apache
下载、解压并安装Apache(我下载的是httpd-2.2.14.tar.gz),注意需安装代理所需的modules.
#tar zxvf httpd-2.2.14.tar.gz 
#cd httpd-2.2.14
#./configure --prefix=/apps/cluster/apache --enable-mods-shared=proxy
#make
#make install
二、安装tomcat
下载、解压并安装tomcat(我下载的是apache-tomcat-5.5.28.tar.gz),注意安装前需先设置好Java环境。
三、配置集群.
注意如果在lunix下需要开通组播,命令如下:
开通:#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
查看: #route -e
查看网卡: #ifconfig -a
针对 session的处理,tomcat的集群两种方式:sticky模式(黏性会话模式);session复制模式。
sticky模式:同一个用户的访问请求都被派送到同一个tomcat实例上。
好处:无须在多台 服务器之间实现session共享了
缺点:不能实现 failureover了,一但用户访问的机器挂掉,那么其session就会丢失。
session复制模式:同一用户的SESSION会被拷贝到各TOMCAT实例上。
好处:解决failureover的问题,即使某一台web服务器挂掉了,用户请求会被负载到其他web服务器上,且session也被复制了,对用户而言就像是在同一台机器上操作一样。
缺点:session复制需要 系统资源和 网络的开销,尤其是当web服务器多的时候或session里存储的数据量大的时候,这点将会比较的明显(未做极限测试)。
针对这两种方式的优缺点,可以将两种模式结合的方式来达到更好的效果,那就是 sticky+session复制模式。用户的请求按照 sticky方式被分发到同一个web服务器上,同时tomcat在后台做异步复制(非同步)session到其他web服务器,这样我们使用 sticky的简便性,同时又有了一定的容错能力。
 
1、在每个tomcat目录下的conf\Catalina\localhost目录下建立一个ROOT.xml
<?xml version="1.0" encoding="UTF-8"?> 
<Context docBase="/apps/cluster/gsp" privileged="true" antiResourceLocking="false" antiJARLocking="false" distributable="true"> 
</Context>
2、修改各TOMCAT端口,避免在同一机器上启动TOMCAT时造成访问端口冲突,不同机器可能不修改。
3、配置 server.xml文件,打开并找到配置Engine的位置,加入 jvmRoute="tomcat1",表示这个tomcat的实例名称为tomcat1。修改前后的对比如下:
修改前:<Engine name="Catalina" defaultHost="localhost">
修改后:<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
各个TOMCAT的jvmRoute="tomcat1"需要配置成不一样的值
找到Cluster标签,并取消它的注释即可,无须做任何修改。注意修改Cluster标签下的tcpListenPort端口号,避免端口冲突。
四、配置apache
编辑apache配置文件 #vi /usr/apache/conf/httpd.conf,在最后添加以下内容
ProxyRequests Off
ProxyPass / balancer://gspcluster/ stickysession=JSESSIONID
<Proxy balancer://gspcluster/>
BalancerMember ajp://192.168.0.143:18009  route=tomcat1 loadfactor=50
BalancerMember ajp://192.168.0.143:28009  route=tomcat2 loadfactor=50
BalancerMember ajp://192.168.0.143:38009  route=tomcat3 loadfactor=50
</Proxy>
五、修改web.xml文件 添加元素<distributable/>
六、测试页面
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<%out.println("<br/>ID " + session.getId()+"");
  // 如果有新的 Session 属性设置
  String dataName = request.getParameter("dataName");
  session.setAttribute("sessiontest", "test session!!!");
  out.println( "sessiontest" + " = " + String.valueOf(session.getAttribute("sessiontest"))+"<br/>");
 
  if (dataName != null && dataName.length() > 0) {
     String dataValue = request.getParameter("dataValue");
     session.setAttribute(dataName, dataValue);
  }
  out.print("<br/>Session 列表");
  Enumeration e = session.getAttributeNames();
  while (e.hasMoreElements()) {
     String name = (String)e.nextElement();
     String value = session.getAttribute(name).toString();
     out.println( name + " = " + value+"");
     System.out.println( name + " = " + value);
   }
 
 
%>
 
<FORM action=test.jsp method=post>
名称:<INPUT name=dataName></INPUT>
值:<INPUT name=dataValue></INPUT>
<INPUT type=submit value=提交查询内容></INPUT>
</FORM>
 
1、如果同一SESSION指向同一TOMCAT则说明sticky模式成功
2、提交内容,停掉已访问的TOMCAT,再刷新页面,若转到另一TOMCAT,且提交值仍存在则说session复制模式成功
 
 

你可能感兴趣的:(apache,tomcat,Web,xml,jsp)