Tomcat集群与加载均衡

    最近由于项目采用单一的Tomcat负载过重,考虑配合Apache,采用集群与加载均衡解决并发与性能问题。之前的项目已使用过相关的技术,在AIX下对4个Tomcat进行集群,由于当时只是在运营时采取此方式,开发与测试并未介入,因此直至今日,也只是闻其声不见其人。不过,想来都是从无到有,连集苦难于一体的IT行业的都不怕,这点自然手到擒来。
   言归正卷,真正把技术应用于生产实际,则需慎之又慎。我们在战略上藐视它,但还得在战术上重视它才对,先从最简的事列下手,终究要让它跑以来。关于集成与加载均衡的原理请参考 Apache与Tomcat规范.
 
准备工作:
 1、JDK1.5 从http://java.sun.com下载
 2、Tomcat5.5 从http://tomcat.apache.org/download-55.cgi下载
 Apache2.2.x 从http://www.apache.org下载
 Apache与Tomcat的JK 从http://tomcat.apache.org下载

配置tomcat

 tomcat的配置比较简单,也应该比较熟悉。所以我们一切从简,打开第一个tomcat的conf/server.xml,1、为了避免与其他端口冲突,那么首先查找到
<Server port="8005" shutdown="SHUTDOWN">,并改为:
<Server port="9005" shutdown="SHUTDOWN">
2、如果你不打算通过http访问tomcat的话(不是指apache),那么屏蔽相应的设置:
  <Connector port="8080" maxHttpHeaderSize="8192"...
  如果不打算通过SSL访问tomcat的话,同样屏蔽相应的设置:
   <Connector port="8443" maxHttpHeaderSize="8192"...
  取消一些无必要的设置,减少这些开销尽可能的节省性能消耗
3、改变AJP1.3的端口
  将
 <Connector port="8009"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
 改为
  <Connector port="9009"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
4、设置JVMRoute
  找到<Engine name="Standalone" defaultHost="localhost"...
  将jvmRoute的属性设置为bakTomcat,这个名字为另一个tomcat在Apache的命名

5、设置tomcat的运行Context
 <Context path="/main" docBase="ROOTs" debug="5">
         <Logger className="org.apache.catalina.logger.FileLogger" prefix="local_main_log."    suffix=".txt" timestamp="true"/>
  </Context>
同以上步骤设置下一个tomcat,将JVMRoute的属性设置为mainTomcat,相应的将其shutdown的port为9006,AJP/1.3的port为9019

配置apache
1、安装Apache
在windows下安装Apache非常简单,按照默认的方式安装即可。根据apache的版本下载对应的JK,我们命名为jk_mod.so,并copy到apache的modules目录下
2、创建workers.properties
  在conf目录下创建workers.properties,内容如下

workers.java_home = C:/Program Files/Java/jdk1.6

ps=/
#这是我们load balance的命名
worker.list=loadbalancer

#此处为我以上提及的两个tomcat的设置
worker.mainTomcat.port=9009
worker.mainTomcat.host=localhost
worker.mainTomcat.type=ajp13
worker.mainTomcat.lbfactor=5

worker.bakTomcat.port=9019
worker.bakTomcat.host=10.101.2.223
worker.bakTomcat.type=ajp13
worker.bakTomcat.lbfactor=5

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=mainTomcat,bakTomcat
worker.balancer.method=B

worker.jkstatus.type=status

这是最简单的设置,复杂的设置请参考http://tomcat.apache.org的官方文档

在conf/httpd.conf中增加

LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile "conf/workers.properties"
JkLogFile "logs/mod_jk2.log"
JkLogLevel info
JkMount /main loadbalancer
JkMount /main/* loadbalancer
在<Directory />...</Directory>更改为
   Options FollowSymLinks Includes
    AllowOverride None
    Order deny,allow
这样,apache就有对相应目录的访问权限。
增加:
 JkMount /jkmanager/* jkstatus
 <Location /jkmanager/>
    JkMount jkstatus
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
 </Location>
这样就可以了解workers的状况。
更改Apache的访问端口:
Listen 80(如果80已被占用,请用其他的端口)

一切ok了,启动2个tomcat和Apache,访问http://IP:port/main,相应的关闭tomcat看是否能正常运行

Tomcat Cluster
以上是如果配置load balance,那么现在就配置cluster,tomcat的cluster显得很简单
分如下几步进行
1、 在
<Context path="/main" docBase="ROOTs" debug="5" distributable="true">
         <Logger className="org.apache.catalina.logger.FileLogger" prefix="local_main_log."    suffix=".txt" timestamp="true"/>
  </Context>
增加属性distributable="true"表示可分布式配置,此项为必须的,否则需要在运行目录的web.xml增加<distributable/>这个设置用于cluster
2、去掉<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                 expireSessionsOnShutdown="false"...的注释
3、将<Engine name="Standalone" defaultHost="localhost" jvmRoute="mainTomcat"> 的jvmRoute设置为本机,之前只是平衡负载,但是在cluster必须要严格分开。

一切ok了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值