Tomcat 多实例部署

前言

以前总是采用很 Low 的方式在同一台服务器上部署多个 Web应用,步骤是这样的:Copy Tomcat 目录 ——> 更改conf/server.xml 三个端口号 ——> 部署war 包 ——> 分别启动访问。

这样是最简单的方式,但事实上是不推荐的,因为如果服务器资源有限,需要部署的应用数目一旦增加,会给服务器带来负担,我们可以充分利用 Tomcat 服务器的性能,减少资源浪费。具体的做法就是采用 “Tomcat多实例” 部署多应用:创建 Tomcat 多实例 ——> 更改 conf/server.xml 三个端口号 ——> 编写启动/关闭脚本 ——>分别启动实例并访问。在动手实践之前,需要对一些基本概念清楚,比如 CATALINA_HOME与 CATALINA_BASE分别指?webapps 下的 example、docs、ROOT目录能删除吗?

参考资料《Tomcat架构解析》

一、Tomcat部署的基本概念

1. CATALINA_HOME与CATALINA_BASE分别指什么?

CATALINA_HOME 指的是 Tomcat 的安装目录,在Windows下Tomcat的安装目录如下:

在这里插入图片描述
bin:Tomcat一些脚本存放目录,比如启动脚本startup.bat/startup.sh等

conf:Tomcat配置文件所在目录,最主要的就是server.xml与web.xml

lib:主要存放Tomcat依赖包

logs:Tomcat日志所在目录。以为catalina、host-manager等开头日志

temp:存放Tomcat运行时的临时文件,通常放一些缓存文件,一般不要删除

webapps:应用部署所在目录,就是在这里存放我们需要部署的文件目录、WAR包

work:存放由JSP文件生成的Servlet

RUNNING.txt:运行说明,必需的一些环境信息

NOTICE:通知信息,软件的版权信息等

RELEASE-NOTES:发布说明,比如版本升级的功能说明

LICENSE:版权许可证,软件版权信息

CATALINA_BASE指的是Tomcat的实例所在目录,Tomcat的实例由除了bin、lib外的目录组成

两者的对比图如下一目了然,那么接下来 配置多实例,也只需要 Copy 相应的目录组成新的 Tomcat 实例即可。

在这里插入图片描述

2. conf 目录下的配置文件具体来做什么?

在这里插入图片描述
Tomcat 的配置需要分为 : JVM 配置、服务器配置、Web应用配置、Tomcat 管理配置四个方面 (其中 JVM 的配置一般在 catalina.sh/catalina.bat中配置,这里不做介绍),这里只做简单的介绍,不会具体介绍 Tomcat 配置

1) 服务器配置

服务器配置主要集中于 $CATALINA_HOME/conf下的catalina.policy、catalina.properties、context.xml、server.xml、tomcat-users.xml、web.xml文件。

2)Web应用配置
web.xml 是Web应用的部署描述文件,它支持的元素及属性来自于 Servlet 规范定义。在Tomcat中,Web 应用的部署描述信息包括 $CATALINA_BASE/conf/web.xml 中的默认配置。

Tomcat 的默认配置比Web 应用定制配置复杂很多,如果是完全基于JSP 的 Web 应用不需要添加任何定制配置。主要包括 ServletContext 的初始化参数、会话配置、Filter 定义与映射等

3)Tomcat 管理配置

主要是针对 host-manager 与 manager 两个功能进行配置,在 Timcat 中我们可以针对虚拟主机进行配置,也可以对我们的Web应用进行管理。

3. webapps 下的目录哪些可以删除?
Windows下查看webapps下的,包括docs、ROOT、manager、host-manager、examples。webapps不一定是Tomcat部署web应用唯一的地方,可以在任何一处,但只需要做好映射即可(context.xml描述文件或者Host的appBase属性可以做到)
在这里插入图片描述
事实上,全部都可以删除。为什么呢?这是因为

1)ROOT:Tomcat 本身默认的访问 http://{ip}:{port},也就是访问 http://127.0.0.1:8080 标志性的Tomcat首页所在之处

2)manager:访问http://{ip}:{port}/manager/html,可以管理部署应用(当然需要配置tomcat-users.xml文件)。一般部署Web应用往往是不需要的
在这里插入图片描述

3)host-manager:访问http://{ip}:{port}/host-manager/html,可以管理配置Host虚拟主机。一般简单web应用部署也不会用到

在这里插入图片描述

4)examples:Servlet、JSP、WebSocket示例,展示在Tomcat下如何使用等,访问http://{ip}:{port}/examples/index.html即可进入。也是不需要的,可以删除

在这里插入图片描述

5)docs:Tomcat HTML文档中心,不影响应用部署,可以删除

4. Tomcat 为了避免端口冲突需要更改哪些端口?

1) Server Port:该端口用于监听关闭 Tomcat 的shutdown命令,默认为 8005

<Server port="8006" shutdown="SHUTDOWN">

2) Connector Port:该端口用于监听 HTTP 的请求,默认为 8080

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

3)AJP Port : 该端口用于监听 AJP (Apache JServ Protocol)协议上的请求,通常用于整合 Apache Server 等其他HTTP 服务器,默认为 8009.实际上可以不用管,因为 AJP 基本用不到,特别是Nginx 与 Tomcat 集成时(nginx 没有响应的支持 AJP ,模块,只有第三方模块支持 AJP 协议)

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

4) Redirect Port:重定向端口,出现在Connectot 配置中,如果该 Connector 仅支持 非 SSL 的普通的 http 请求,那么端口会把 https 的请求转发到这个 Redirect Port 指定的端口,默认为 8443;

简单的应用部署为避免端口冲突,实际上只需要更改 SHUTDOWN 监听端口 与 Connector 链接器监听端口即可。

5. Tomcat 部署应用的方式有哪几种?

1) Context 描述文件部署
Tomcat 支持通过一个独立的 Context 描述文件配置并启动Web 应用,该文件的存储路径由 Host 中 xmlBase 属性指定,若不指定,则默认 CATALINA_BASE/conf/<Engine名称>/<Host名称>对于 Tomcat 默认的就是CLATALINA_BASE/conf/Catalina/localhost,其实也就是conf/context.xml文件:Tomcat启动时即会自动部署该Web应用

2) Web部署
即是以目录形式发布部署 Web 应用,赋值到 Host 指定 appBase 目录下即可完成部署。

3)WAR 包部署
xxx.war 包解压诚睦路形式而已。

二、多实例部署时间

主要以 apache-tomcat-9-0-14 为例 , 下载 tar 压缩包。

1. 部署安装 Tomcat

在已经由JDK环境的CentOS 下解压 tomcat 包即可

在这里插入图片描述

解压命令如下:

tar -zxvf apache-tomcat-9.0.14.tar.gz

2. 创建多实例

创建 tomcat-instance 存放 tomcat_1、tomcat_2 与 tomcat_bin 目录

在这里插入图片描述

创建tomcat_1与tomcat_2实例,将conf webapps等文件copy到实例下的命令:

mkdir tomcat_instance tomcat_instance/tomcat_1 tomcat_instance/tomcat_2 tomcat_instance/tomcat_bin
cd apache-tomcat-9.0.14
mv conf/ webapps/ temp/ logs/ work/ -t ../tomcat_1
mv conf/ webapps/ temp/ logs/ work/ -t ../tomcat_2

3. 更改端口
进入tomcat_1/conf 与 tomcat_2/conf 下更改 server.xml 端口的SHUTDOWN 命令监听端口与 Connector 链接器监听端口

tomcat_1/conf/server.xml:
在这里插入图片描述

tomcat_2/conf/server.xml:
在这里插入图片描述

4.编写脚本
创建启动、关闭脚本(也可以重启脚本),进入 tomcat_bin/ 分别创建 startup.shshutdown.sh
在这里插入图片描述

startup.sh的shell脚本代码如下:

# 指定CATALINA_HOME
export CATALINA_HOME=/home/tomcat/apache-tomcat-9.0.14
# 通过参数的形式输入tomcat实例路径
export CATALINA_BASE=${1%/}

echo $CATALINA_BASE

# 找到tomcat实例的进程ID
TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`


if [ -n "$TOMCAT_ID" ] ; then
echo "tomcat(${TOMCAT_ITOMCAT_ID}) is running now , please shutdown it!";
    exit 2;
fi

TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh`


if [ "$?" = "0" ]; then
    echo "$0 ${1%/} start succeed"
else
    echo "$0 ${1%/} start failed"
    echo $TOMCAT_START_LOG
fi

shutdown.sh的脚本代码如下:

export CATALINA_HOME=/home/tomcat/apache-tomcat-9.0.14
export CATALINA_BASE=${1%/}

echo $CATALINA_BASE

TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'`

if [ -n "$TOMCAT_ID" ] ; then
TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh`
else
  echo "Tomcat instance not found : ${1%/}"
  exit
fi

if [ "$?" = "0" ]; then
    echo "$0 ${1%/} stop succeed"
else
    echo "$0 ${1%/} stop failed"
    echo $TOMCAT_STOP_LOG
fi

5. 部署应用

部署应用就跟平常一样在 webapps 下部署,或者 Context.xml 描述文件映射等,我们现在为了测试,简单引入html文件到 ROOT 目录下面,启动之后分别访问 http://{ip}:8081、http://{ip}:8082

tomcat实例1 index.jsp首页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Tomcat 多实例测试</title>
</head>
<body>
   <h1>Tomcat Instance 1</h1>
</body>
</html>

tomcat实例2 index.jsp首页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Tomcat 多实例测试</title>
</head>
<body>
   <h1>Tomcat Instance 2</h1>
</body>
</html>

6. 启动应用

启动脚本,传入正确实例路径,启动两个 tomcat 实例。

启动tomcat实例1
在这里插入图片描述
启动tomcat实例2
在这里插入图片描述

7. 访问应用

访问http://{ip}:8081
在这里插入图片描述
访问http://{ip}:8082
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44626569/article/details/89523033