前言
本文将通过个人口吻介绍Tomcat单机多实例部署,在目前时间点【2017年8月13号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容。
正文:
期望实现功能: 1、更新升级:周期性地更新Tomcat,使用最新版的Tomcat 2、统一管理,让Tomcat版本统一,实例的配置统一 3、多个项目使用不同端口号进行区分,并且互相不影响,并且对于bin/、lib/等公共数据共享使用,节约系统资源 4、Tomcat运行多实例,并且web应用放置到Tomcat的安装目录之外的单独目录,便于区分管理 5、对一个项目的停止启动等不会影响到其他项目
实现思路: 1、Tomcat运行时,系统会从conf及webapps目录中读取配置文件,并且写入logs、temp和work目录中 2、一些jar文件和class文件需要从公共目录例如lib/中加载,只需要加载一次就可以。 3、为了多个实例能同时运行,每一个Tomcat实例必须有自己的目录集
传统实现方式:简单的复制出一个新的Tomcat目录后改一下端口 缺点: 1、资源浪费,公用资源被多次加载,造成在内存中不必要的重用 2、针对不同web服务做配置能做但是异常麻烦 3、对Tomcat进行版本升级时能做但是异常麻烦,每个目录都需要替换,不必要的大量工作
Tomcat运行机制:
2个变量: CATALINA_HOME:Tomcat的安装路径,只需要包含bin/及lib/目录即可 CATALINA_BASE:Tomcat实例所在路径,只需要包含conf、webapps、logs、temp、work目录即可 因此我们可以在不影响Tomcat实例运行的情况下,替换掉$CATALINA_HOME中的文件即可完成升级
具体实施
1、解压安装包 [tomcat@master ~]$ pwd /home/tomcat [tomcat@master ~]$ ls apache-tomcat-8.5.16 apache-tomcat-8.5.16.tar.gz [tomcat@master ~]$
2、创建实例目录及脚本目录 [tomcat@master ~]$ mkdir tomcat-1 tomcat-2 tomcat-shell [tomcat@master ~]$ ls apache-tomcat-8.5.16 apache-tomcat-8.5.16.tar.gz tomcat-1 tomcat-2 tomcat-shell
3、移动实例所需文件及目录到2个实例目录中 [tomcat@master ~]$ cd apache-tomcat-8.5.16 [tomcat@master apache-tomcat-8.5.16]$ ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work [tomcat@master apache-tomcat-8.5.16]$ mv conf/ webapps/ temp/ logs/ work/ ../tomcat-1 [tomcat@master apache-tomcat-8.5.16]$ cd .. [tomcat@master ~]$ cp -a tomcat-1/* tomcat-2/
4、新建Tomcat启动、停止脚本 [tomcat@master ~]$ cd tomcat-shell/
1)启动脚本 [tomcat@master tomcat-shell]$ vim start_tomcat.sh #!/bin/bash #description: This script is for start tomcat instance, $1 is the tomcat/web instance directory #history: 2017/8/13 first release #author: wang xiaohua #contact: wxh2673@163.com
source /etc/profile PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export CATALINA_HOME=/home/tomcat/apache-tomcat-8.5.16 export CATALINA_BASE=${1%/} export log=$CATALINA_BASE/startup.log # use %/ is for next grep match echo $CATALINA_BASE Tomcat_PID=$(ps aux | grep "java" | grep -v "grep" | grep "Dcatalina.base=${CATALINA_BASE}" |awk '{print $2}')
if [ -n "$Tomcat_PID" ];then echo "The tomcat instance $CATALINA_BASE is running,please checkout the status"; exit 1; fi /usr/bin/sh $CATALINA_HOME/bin/startup.sh > $log 2>&1
if [ "$?" = 0 ];then echo "The tomcat instance $CATALINA_BASE start succeed!!!"; else echo "The tomcat instance $CATALINA_BASE start faild!!!" tail -f $log fi
2)停止脚本 [tomcat@master tomcat-shell]$ vim stop_tomcat.sh
#!/bin/bash #description: This script is for stop tomcat instance, $1 is the tomcat/web instance directory #history: 2017/8/13 first release #author: wang xiaohua #contact: wxh2673@163.com
source /etc/profile PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export CATALINA_HOME=/home/tomcat/apache-tomcat-8.5.16 export CATALINA_BASE=${1%/} export log=$CATALINA_BASE/stop.log # use %/ is for next grep match echo $CATALINA_BASE Tomcat_PID=$(ps aux | grep "java" | grep -v "grep" | grep "Dcatalina.base=${CATALINA_BASE}" |awk '{print $2}')
if [ -n "$Tomcat_PID" ];then /usr/bin/sh $CATALINA_HOME/bin/shutdown.sh > $log 2>&1 else echo "The tomcat instance $CATALINA_BASE is not running,please checkout the status" exit 1;
fi
if [ "$?" = 0 ];then echo "The tomcat instance $CATALINA_BASE stop succeed!!!"; else echo "The tomcat instance $CATALINA_BASE stop faild!!!" tail -f $log fi
[tomcat@master tomcat-shell]$ chmod +x start_tomcat.sh stop_tomcat.sh
3)可以整合到一块,写成函数,添加重启功能,先停止再启动,这里没有写,留给你们发挥。
5、配置server.xml文件,为每个项目设置不同的端口
Server Port:该端口用于监听关闭tomcat的shutdown命令,默认为8005 Connector Port:该端口用于监听HTTP的请求,默认为8080 AJP Port:该端口用于监听AJP( Apache JServ Protocol )协议上的请求,通常用于整合Apache Server等其他HTTP服务器,默认为8009 Redirect Port:重定向端口,出现在Connector配置中,如果该Connector仅支持非SSL的普通http请求,那么该端口会把 https 的请求转发到这个Redirect Port指定的端口,默认为8443;
在这里讲tomcat-2的端口设置为8081,tomcat-1使用默认的8081
[tomcat@master conf]$ pwd /home/tomcat/tomcat-2/conf [tomcat@master conf]$ vim server.xml
69 <Connector port="8081" protocol="HTTP/1.1"
只修改这一行即可
6、启动tomcat实例 [tomcat@master tomcat-shell]$ sh start_tomcat.sh /home/tomcat/tomcat-1/ /home/tomcat/tomcat-1 The tomcat instance /home/tomcat/tomcat-1 start succeed!!!
[tomcat@master tomcat-shell]$ sh start_tomcat.sh /home/tomcat/tomcat-2 /home/tomcat/tomcat-2 The tomcat instance /home/tomcat/tomcat-2 start succeed!!!
[tomcat@master tomcat-shell]$ lsof -i:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 7557 tomcat 48u IPv4 1810551 0t0 TCP *:webcache (LISTEN) [tomcat@master tomcat-shell]$ lsof -i:8081 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 7617 tomcat 48u IPv4 1810751 0t0 TCP *:tproxy (LISTEN)
[root@master webapps2]# ps aux | grep java | grep -v grep | awk '{print $2}' 7557 7617
可以看到2个tomcat实例的PID是不同的,也就是说对某个实例进行操作是不会影响到另外一个实例的
本文永久更新链接地址:http://www./Linux/2017-10/147259.htm
|