阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Tomcat单机多实例部署-多项目部署

143次阅读
没有评论

共计 4500 个字符,预计需要花费 12 分钟才能阅读完成。

前言

    本文将通过个人口吻介绍 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.linuxidc.com/Linux/2017-10/147259.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计4500字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中