前言

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

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

  参考资料《Tomcat架构解析》(我这里只有带标签的PDF电子版,有需要的小伙伴也可以私信或者评论我)

  


一、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两个功能进行配置,在Tomcat中我们可以针对虚拟主机进行配置,也可以对我们的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基本用不到,特别是Ngxin与Tomcat集成时(Nginx没有响应的支持AJP模块,只有第三方模块支持AJP协议)

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

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

  

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

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

  1) Context描述文件部署

  Tomcat支持通过一个独立的Context描述文件配置并启动Web应用,该文件的存储路径由Hot中xmlBase属性指定,若不指定,则默认CATALINA_BASE/conf/<Engine名称>/<Host名称>,对于Tomcat默认的就是CATALINA_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.sh与shutdown.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

  

Tomcat多实例部署的更多相关文章

  1. 性能测试二十:环境部署之Tomcat多实例部署+日志监控

    一个tomcat性能有限,所以需要部署等多个tomcat 单实例部署与windows下类似,项目包放到webapp目录下,启动bin目录下的startup.sh即可启动命令:./startup.sh启 ...

  2. 19.Tomcat多实例部署及负载均衡、动静分离

    Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...

  3. 搭建Tomcat应用服务器、tomcat虚拟主机及Tomcat多实例部署

    一.环境准备 系统版本:CentOS release 6.6 (Final) x86_64 Tomcat版本:tomcat- JDK版本:jdk-8u25-linux-x64 关闭防火墙 软件包下载地 ...

  4. tomcat 多实例部署

    tomcat 配置多个实例 参考文档 聊聊 Tomcat 的单机多实例 https://www.cnblogs.com/mafly/p/tomcat.html 极客学院 Tomcat 8 权威指南 h ...

  5. CentOS6.6从头到尾部署nginx与tomcat多实例 转

    前提条件: 1.需要一个全新的centos系统(本文中用到是centos6.6) 2.vmware虚拟机 3.vmware下安装centos系统,以NAT方式与宿主机相连 4.在centos系统中pi ...

  6. tomcat单机多实例部署

    最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...

  7. Tomcat学习总结(10)——Tomcat多实例冗余部署

    昨天在跟群友做技术交流的时候,了解到,有很多大公司都是采用了高可用的,分布式的,实例沉余1+台.但是在小公司的同学也很多,他们反映并不是所有公司都有那样的资源来供你调度.往往公司只会给你一台机器,因为 ...

  8. tomcat单应用多实例部署报错 应用jar不存在

    使用tomcat部署war包,同一环境有tomcat7和tomcat8两个应用,我这边使用tomcat7, 应用部署在其他目录,通过在启动脚本中设置CATALINA_HOME和CATALINA_BAS ...

  9. CentOS6.6从头到尾部署nginx与tomcat多实例

    前提条件: 1.需要一个全新的centos系统(本文中用到是centos6.6) 2.vmware虚拟机 3.vmware下安装centos系统,以NAT方式与宿主机相连 4.在centos系统中pi ...

随机推荐

  1. PeopleSoft 启用多语言输入

    今天,我的一位同事询问有的人有语言选择,有的人没有(如下图所示). 以下是PT856.09菜单路经: 主菜单-->我的首选项--->一般设置--->多语言条目

  2. [LeetCode] Positions of Large Groups 大群组的位置

    In a string S of lowercase letters, these letters form consecutive groups of the same character. For ...

  3. 样式布局与 BFC

    一.几类视图 内联视图:inline 单行 块级视图:block 换行,有高度 行内块级视图:inline-block 单行,有高度 二.几类布局 块级布局 换行,通过设置 margin 水平居中 & ...

  4. Edge Intelligence: On-Demand Deep Learning Model Co-Inference with Device-Edge Synergy

    边缘智能:按需深度学习模型和设备边缘协同的共同推理 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文. ...

  5. Lesson 26 The best art critics

    Text I am an art student and I paint a lot of pictures. Manay people pretend that they understand mo ...

  6. 1.2 Why need pluggable?

    When Android programmers write new features, bugs, or even crashes will exits in their App. Once a t ...

  7. SQL语句题

    SQL语句题 Student(Sno,Sname,Sage,Ssex)注释:学生表(学号,姓名,性别年龄,性别) Course(Cno,Cname,Tno) 注释:课程表(课程号,课程名称,教师编号) ...

  8. 实战经验丨PHP反序列化漏洞总结

    又到了金三银四跳槽季,很多小伙伴都开始为面试做准备,今天小编就给大家分享一个网安常见的面试问题:PHP反序列化漏洞. 虽然PHP反序列化漏洞利用的条件比较苛刻,但是一旦被利用就会产生很严重的后果,所以 ...

  9. JS 将表格table导出excel

    function tableToExcel(id) { var tb = document.getElementById(id); var html = '<html><head&g ...

  10. [Swift]LeetCode64. 最小路径和 | Minimum Path Sum

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...