最近由于项目采用单一的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了
言归正卷,真正把技术应用于生产实际,则需慎之又慎。我们在战略上藐视它,但还得在战术上重视它才对,先从最简的事列下手,终究要让它跑以来。关于集成与加载均衡的原理请参考 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了