Tomcat多实例部署

前言   以前总是采用很Low的方式太同一台服务器上部署多个Web应用,步骤是这样的:Copy Tomcat目录-->更改conf/server.xml三个端口号----->部署war包----->分别启动访问。   这样是最简单的方式,但事实上是不推荐的,因为如果服务器资源有限,需要部署的应用数目一旦增加,会给服务器带来负担,我们可以充分利用Tomcat服务器的性能,减少资源浪费。具体的做法就是采用“Tomcat多实例”部署多应用:创建Tomcat多实例---->更改conf/server.xml三个端口号----->部署应用------>编写启动/关闭脚本------->分别启动实例并访问。在动手实践之前,需要对一些基本概念清楚,比如与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      2)Connector Port:该端口用于监听HTTP的请求,默认为8080      3)AJP Port:该端口用于监听AJP( Apache JServ Protocol )协议上的请求,通常用于整合Apache Server等其他HTTP服务器,默认为8009。实际上可以不用管,因为AJP基本用不到,特别是Ngxin与Tomcat集成时(Nginx没有响应的支持AJP模块,只有第三方模块支持AJP协议)   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//,对于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" %> Tomcat 多实例测试

Tomcat Instance 1

复制代码   tomcat实例2 index.jsp首页 复制代码 <%@ page contentType="text/html;charset=UTF-8" language="java" %> Tomcat 多实例测试

Tomcat Instance 2

复制代码   6. 启动应用   启动脚本,传入正确实例路径,启动两个tomcat实例。   启动tomcat实例1      启动tomcat实例2      7. 访问应用   访问http://{ip}:8081      访问http://{ip}:8082    前言   以前总是采用很Low的方式太同一台服务器上部署多个Web应用,步骤是这样的:Copy Tomcat目录-->更改conf/server.xml三个端口号----->部署war包----->分别启动访问。   这样是最简单的方式,但事实上是不推荐的,因为如果服务器资源有限,需要部署的应用数目一旦增加,会给服务器带来负担,我们可以充分利用Tomcat服务器的性能,减少资源浪费。具体的做法就是采用“Tomcat多实例”部署多应用:创建Tomcat多实例---->更改conf/server.xml三个端口号----->部署应用------>编写启动/关闭脚本------->分别启动实例并访问。在动手实践之前,需要对一些基本概念清楚,比如与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      2)Connector Port:该端口用于监听HTTP的请求,默认为8080      3)AJP Port:该端口用于监听AJP( Apache JServ Protocol )协议上的请求,通常用于整合Apache Server等其他HTTP服务器,默认为8009。实际上可以不用管,因为AJP基本用不到,特别是Ngxin与Tomcat集成时(Nginx没有响应的支持AJP模块,只有第三方模块支持AJP协议)   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//,对于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" %> Tomcat 多实例测试

Tomcat Instance 1

复制代码   tomcat实例2 index.jsp首页 复制代码 <%@ page contentType="text/html;charset=UTF-8" language="java" %> Tomcat 多实例测试

Tomcat Instance 2

复制代码   6. 启动应用   启动脚本,传入正确实例路径,启动两个tomcat实例。   启动tomcat实例1      启动tomcat实例2      7. 访问应用   访问http://{ip}:8081      访问http://{ip}:8082    https://www.cnblogs.com/jian0110/p/10517576.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信