Tomcat多实例 - 单机

时间:2023-03-10 05:56:12
Tomcat多实例 - 单机

最近在研究Apache+Tomcat+负载均衡/集群的过程中,发现了一篇好的在单机上部署多个tomcat实例的blog。

感受:关于Apache+Tomcat+负载均衡/集群,国内关于这方面的资料是挺多,但不知道是我搜索的问题还是国内的资料参差不齐,没有几个是全面并且精准的。经过不懈的尝试,还是外来的和尚会念经,而且质量很高(-:

单机多tomcat实例:

http://www.ramkitech.com/2011/07/running-multiple-tomcat-instances-on.html

再讲些有用没用的,其实类似这样单机上部署多个tomcat实例,只要对源码有所了解就可以自己动手配置实现(比如说我这样低水平的,花些时间看看startup脚本就知道配置的道理了),所以更多时候,我们静不下心来去认真研究,单纯的求快,碰巧work了就万事大吉了。可能这也是我们总是跟在美国后面的原因吧。

废话少说,我用的环境,Win7(没有管理员权限)+ apache-tomcat-7.0.54.zip

知识准备:

1. JDK和JRE环境提前准备好,这个肯定是必须的前提;

2. Tomcat的启动需要设置CATALINA_HOME和CATALINA_BASE。CATALINA_HOME将用来访问bin和lib;CATALINA_BASE将用来访问conf,webapps,logs,temp,work;

3. CATALINA_BASE若不指定,则默认为CATALINA_HOME

开始部署多个tomcat实例

1. 解压apache-tomcat-7.0.54.zip到某文件目录,解压后的目录作为CATALINA_HOME指向的目录;

2. 在同级目录下建立多个tomcat的实例,结构类似如下(我用了Application的名字命名的,这都无所谓了);

  Tomcat多实例 - 单机

3. 拿其中一个实例Lego来说,将apache-tomcat-7.0.54目录下的conf,logs,temp,webapps(work目录在tomcat启动时会自动创建)拷到Lego实例下

  Tomcat多实例 - 单机

4. 下面修改conf下的配置文件server.xml,而且只需要修改shutdown, connector, ajp三个端口号。为了防止以后忘了端口号,我把这些端口号记录在README.txt中。

5. 如上图所示,在Lego目录下,编写start和shutdown脚本。

startup-lego.bat

Tomcat多实例 - 单机

shutdown-lego.bat

Tomcat多实例 - 单机

6. 别忘了把自己的application放在webapps下;

7. 运行start和shutdown脚本,测试。

--- 到此,一个tomcat实例Lego部署完成;照此方法可以部署其他的tomcat实例,但注意三个端口号不能冲突。

然后想到个问题:单机下这样部署多个tomcat实例有什么用呢?

  答:拿我的经历为例,之前是将所有的application放在webapps目录下,导致所有application共用一套配置,一起start,一起shutdown;但很多时候,我只想让其中的某个application shutdown掉。之前的解决办法简单粗暴,多弄几个tomcat,每个tomcat的webapps下放一个application,然后再配置不同的端口号。但这样弄,明显觉得application过重了,而且需要维护多套tomcat。

刚刚发现application的log生成位置不对,还是生成在apache-tomcat-7.0.54的logs目录下。这应该是application中log4j配置的问题。

经检查发现,log4j.appender.R.File =${catalina.home}/logs/lego.log,修改成log4j.appender.R.File =${catalina.base}/logs/lego.log解决!

Done!