`
bwhzhl
  • 浏览: 102899 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

apache2+tomcat5.5集群+session同步

阅读更多

说明:借前人之鉴,写一篇关于tomcat集群及session同步的问题,首先介绍tomcat集成及做集群的原因和必要性,session同步的作用。然后包括各软件的安装配置。

原理:tomcat 做个WEB服务器有它的局限性,处理能力低,效率低。承受并发小(1000左右)。但目前有不少网站或者页面是JSP的。并采用了tomcat做为WEB,因此只能在此基础上调优。
目前采取的办法是Apache + Mod_JK + tomcat 来解决一部分请求,用户访问的是apache,但有jsp页面的时候才会去请求tomcat。如果量一大,那么tomcat无法承受,那么只能做tomat集群,Apache + Mod_JK 就是负载均衡器了。
Mod_JK2负载均衡 可以把不同的jsp请求转发到不同的tomcat服务器,还可以侦测服务器存活。如果有条件可以给Mod_JK2做一个HA因为做完集群后压力就在JK上了。
      
简单拓仆图:



一、测试环境及软件安装:-----如果已经安装过的可以省略这步
linux 2.6 内核  centos 5.2
本例二台tomcat 不在同一机器。

先安装了所需的程序库

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel
复制代码

下载源码包:(本文不安装PHP)
apache2 和tomcat5都可以在 apache.org 下载
tomcat5需要JDK1.5的版本。
JK本文用的源码包tomcat-connectors

Apache 安装:
# tar zxvf httpd-2.2.8.tar.gz
#cd httpd-2.2.8
# ./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so
# make && make install

/usr/local/apache2/bin/apachectrl start
看到apache就配置成功了。


JDK的安装
#chmod 755 jdk-1_5_0_16-linux-i586.bin
#./jdk-1_5_0_16-linux-i586.bin
# mv jdk-1_5_0_16 /usr/local/
到此JDK已经安装完成

到/usr/bin目录下,把原用的java,javac文件删除:
#rm -rf java
#rm ?rf javac
在/usr/bin 下建立 软连接 java

# ln -s /usr/local/jdk-1_5_0_16/bin/java /usr/bin/java
# ln -s /usr/local/jdk-1_5_0_16/bin/javac /usr/bin/javac
# java ?version
# javac -version
java version "1.4.2_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03)
Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode)
复制代码

为了方便下在的工作建立两个软链接:
ln -s /usr/local/jdk-1_5_0_16  /usr/local/jdk
ln -s /usr/local/jdk-1_5_0_16/jre /usr/local/jre


Tomcat的安装
#tar -zxvf apache-tomcat-5.5.27.tar.gz
# mv apache-tomcat-5.5.27 /usr/local/tomcat
设置环境变量:

#Set  Environment  by NetSeek
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
JRE_HOME=/usr/local/jre
export JRE_HOME
CLASSPATH=/usr=/usr/local/tomcat/common/lib/:/usr/local/jdk/lib:/usr/local/jre/lib
export CLASSPATH
PATH=$PATH:/usr/local/tomcat/bin/:/usr/local/apache/bin:/usr/local/jdk/bin:/usr/local/jre/bin
export PATH
TOMCAT_HOME=/usr/local/tomcat
export TOMCAT_HOME
复制代码

启动tomcat以检查是否存在错误:
#cd /usr/local/tomcat/bin
#./startup.sh
http://IP地址:8080 可以看到猫头:)成功了。

在另一台机器上也安装tomcat 并配置好。

JK 安装 (整合apache tomcat)
# tar zxvf tomcat-connectors-1.2.27-src.tar.gz
#cd tomcat-connectors-1.2.27-src/native
# ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk
# make && make install

在/usr/local/apache2/modules/ 下会产生mod_jk.so
修改apache配置文件:

LoadModule jk_module modules/mod_jk.so

JkWorkersFile /usr/local/tomcat/conf/jk/workers.properties   JK配置文件 负载的配置
JkShmFile logs/mod_jk.shm
JkLogFile /usr/local/tomcat/logs/mod_jk.log  相关日志的设置
JkLogLevel info
JkMount /*.jsp controller  将jsp的请求转发给 controller(负载均衡控制器)
复制代码

修改DoucmentRoot 与tomcat的目录一致。
本文修改为:/usr/local/tomcat/webapps/

二、调度器JK的配置
建立JK配置文件:
#vi /usr/local/tomcat/conf/jk/workers.properties

workers.tomcat_home=/usr/local/tomcat    #指定tomcat的目录――如果2个tomcat在同一台机器该选项去掉
workers.java_home=/usr/local/jdk         #指定jdk的目录
ps=/                                    
worker.list=controller                   #指定负载名,这个可以随便起,与下面的 worker.controller.type=lb要对应

#========tomcat1======== 第一台tomcat的配置
worker.tomcat1.port=8009
worker.tomcat1.host=localhost   #这里也可以写IP
worker.tomcat1.type=ajp13      
worker.tomcat1.lbfactor=1       #权量 数值越大,分配的机率就最小

#========tomcat2===========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.19.81 (tomcat2的IP)
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

#========controller,负载均衡器=======
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2  # server.xml配置文件里的jvmRoute="tomcat1"指定的名字
worker.controller.sticky_session=1
复制代码

三、tomcat集群配置,session 同步配置:
1、tomca1 tomcat 2 在同一台机器
Tomcat 1  (IP: 192.168.19.199)

A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B、去掉<Cluster>  <\Cluster> 的注释符
C、修改Cluster 节点信息
<Membership              
className="org.apache.catalina.cluster.mcast.McastService"               

mcastBindAddress="192.168.19.199"               
mcastAddr="224.0.0.1"               
mcastPort="45564"   
mcastFrequency="500"               
mcastDropTime="3000"/>
       <Receiver         
className="org.apache.catalina.cluster.tcp.ReplicationListener"               

tcpListenAddress="192.168.19.199"               
tcpListenPort="4001"               
tcpSelectorTimeout="100"               
tcpThreadCount="6"/>
复制代码

Tomcat 2  (IP: 192.168.19.81)

A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
B、去掉<Cluster>  <\Cluster> 的注释符
C、修改Cluster 节点信息
<Membership      
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.19.199"
mcastAddr="224.0.0.1"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver         
className="org.apache.catalina.cluster.tcp.ReplicationListener"         
tcpListenAddress="192.168.19.199"
tcpListenPort="4002" 一定要改
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
D、将8080 8009 8082三个节点的端口改为
    9080 9009 9082 避免 与tomcat1端口冲突
注:这里的IP也可以不改
复制代码

2、tomca1 tomcat 2 在不同机器上
Tomcat 1  (IP: 192.168.19.199)


A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B、去掉<Cluster>  <\Cluster> 的注释符
C、修改Cluster 节点信息
<Membership           
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.19.199"               
mcastAddr="224.0.0.1"               
mcastPort="45564"               
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver         
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="192.168.19.199"               
tcpListenPort="4001"               
tcpSelectorTimeout="100"               
tcpThreadCount="6"/>   
复制代码

Tomcat 2  (IP: 192.168.19.81)

A、修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B、去掉<Cluster>  <\Cluster> 的注释符
C、修改Cluster 节点信息
<Membership
className="org.apache.catalina.cluster.mcast.McastService"               
mcastBindAddress="192.168.19.81"               
mcastAddr="224.0.0.1"               
mcastPort="45564"     mcastFrequency="500"               
mcastDropTime="3000"/>
<Receiver         
className="org.apache.catalina.cluster.tcp.ReplicationListener"           

tcpListenAddress="192.168.19.81"               
tcpListenPort="4001"               
tcpSelectorTimeout="100"               
tcpThreadCount="6"/>
复制代码

修改web应用里面WEB-INF目录下的web.xml文件,加入标签
<distributable/>
直接加在</web-app>之前就可以了
做tomcat集群必须需要这一步,否则用户的session就无法正常使用。

注意事项:1、mcastAddr="224.0.0.1"  这主广播地址因此需要开启网卡组播功能
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
分别在各机器上运行
2、查看端口情况:
Netstat ?antl |grep 4001 同步监听的端口
tomcat1

tomcat2

3、测试广播
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal1
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal2
如果不报错则能正常广播
tomcat-replication.jar 下载:http://cvs.apache.org/~fhanik/tomcat-replication.jar
如果是二台机器,可以用tcpdump 抓取包


五、测试 集群及session同步
在webapps 下新建test 目录
目录下建WEB-INF目录下的web.xml文件

<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>TomcatDemo</display-name>
        <distributable/>
</web-app>
复制代码

再在webapps 下 建立print.jsp   test.jsp
Print.jsp :

<%
    System.out.println("www.linuxtone.org   liuyu.blog.51cto.com");
%>
复制代码

test.jsp

<%@ page contentType="text/html; charset=GBK" %>
<%@ 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>");
   String dataName = request.getParameter("dataName");
   session.setAttribute("myname","session?");
   if (dataName != null && dataName.length() > 0) {
      String dataValue = request.getParameter("dataValue");
      session.setAttribute(dataName, dataValue);
   }
   out.print("<b>Session P±?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="OST">
     &ucirc;&sup3;?<input type=text size=20 name="dataName">
      <br>
     ?:<input type=text size=20 name="dataValue">
      <br>
     <input type=submit>
    </form>
</body>
</html>
复制代码

重启所有的服务。

访问 http://192.168.19.199/test/print.jsp
如图可以看出tomcat 集群配置完成

Session 复制的查看
在同一窗口,输入名称和值,
在日志可以看到如下结果. 这种结果表明成功了
tomcat1

tomca2



错误总汇:
skipping state transfer. No members active in cluster group."
mcastBindAddress 没有添加或添加得不对

?Unknown default host: ajp13
JK 配置不当

分享到:
评论

相关推荐

    tomcat5.5集群完整版

    【标题】"Tomcat5.5集群完整版"所涉及的知识点主要集中在如何构建和管理一个基于Tomcat5.5的服务器集群。Tomcat作为Apache软件基金会的一个开源项目,是Java Servlet和JavaServer Pages(JSP)技术的开源Web应用...

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

    - **Tomcat**: 选择Tomcat5.5或Tomcat6.0版本。 #### 二、Apache配置 在进行Apache配置时,主要涉及对`httpd.conf`文件的修改和`workers.properties`文件的创建。 ##### 1. httpd.conf配置 - 将`mod_jk.so`文件...

    Tomcat 5.5

    对于高可用性和负载均衡,Tomcat 5.5支持集群配置,通过复制 session 数据并在多个实例间分发请求来实现。这需要配合像Apache HTTP Server或Nginx这样的反向代理服务器来实现负载均衡。 ### 8. 兼容性与版本升级 ...

    Tomcat5.5 API

    《Tomcat5.5 API》是针对Apache Tomcat 5.5版本的API文档,它为开发者提供了详尽的接口信息和使用指南。Tomcat是一个开源的Java Servlet容器,广泛用于构建和部署Java Web应用程序。这个API文档是开发人员理解和使用...

    tomcat集群安装配置_session.doc

    ### Tomcat集群安装配置_session知识点概述 #### 一、项目背景及环境介绍 根据文档提供的信息,本项目是由西安辉盛科技发展有限责任公司发起的,旨在实现Tomcat集群的搭建,以便于支持高并发访问场景下的应用服务...

    apache-TOMCAT-5.5.25

    - **集群和负载均衡**:虽然Tomcat 5.5.25不是设计为大规模集群环境的,但它支持基本的session复制,可以在简单的负载均衡环境中使用。 - **扩展性**:Tomcat 5.5.25可以与其他开源项目如Spring、Hibernate等集成,...

    轻松实现Apache,Tomcat集群和负载均衡整理.pdf

    ### 知识点详解:轻松实现 Apache、Tomcat 集群与负载均衡 #### 一、环境搭建 本文档将详细介绍如何通过Apache与Tomcat搭建集群并实现负载均衡。以下为所需软件版本: - **Apache**: Apache 2.0.55 - **Tomcat**:...

    apache_tomcat_jk集群(负载均衡)

    tomcat: 1.6 os: Red Hat Enterprise Linux Server release 5.5 apache:2.4.7 jk:1.2.37 Red Hat Enterprise Linux 下两台服务器布署...win7下 单机双 tomcat 布署测试成功(apache布署在linux上) 都可实现session复制

    apache-tomcat-5.5.29

    10. **集群与负载均衡**:Tomcat 5.5.29支持集群功能,通过复制session数据和故障转移实现高可用性。同时,可以配合其他负载均衡软件进行负载分发。 11. **管理工具**:Tomcat内建了Manager和Host Manager两个管理...

    apache-tomcat-5.5.28 源代吗

    4. **Cluster**:如果开启集群功能,这部分代码会处理节点间的通信和session复制。 5. **Common**:包含了所有其他模块共享的库文件和资源。 6. **Webapps**:默认的应用部署目录,包含示例应用和管理应用(如...

    windows配置Tomcat_负载均衡_集群

    本文将详细介绍如何在Windows系统中配置Tomcat集群以及通过Apache实现负载均衡。此配置旨在提高Web应用的服务可用性和性能。 **环境说明:** - **Apache**: 使用版本为`apache_2.0.55` - **Tomcat**: 使用版本为`...

    tomcat集群与负载均衡(windows)

    2. **配置集群通信**:在两台Tomcat服务器的`server.xml`中,配置`Cluster`元素,以便它们之间能交换session数据。例如: ```xml ... &lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"&gt; ......

    Tomcat 接口文档 API

    9. **Clustering and Session Replication**: 对于高可用性和负载均衡,Tomcat支持集群和会话复制。通过集群配置,可以将请求分散到多个Tomcat实例上,提高系统容错能力。会话复制则确保用户在集群中的任何节点间...

    单点登录源码

    Spring session | 分布式Session管理 | [http://projects.spring.io/spring-session/](http://projects.spring.io/spring-session/) MyBatis | ORM框架 | [http://www.mybatis.org/mybatis-3/zh/index.html]...

Global site tag (gtag.js) - Google Analytics