Tomcat单机多实例部署
作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/p/11231182.html
目录
一、Tomcat目录介绍
二、Tomcat 常见的几种部署场景
三、Tomcat多实例部署
官方推荐多实例部署图
配置多实例
启动多实例
配置多实例网站
访问多实例网站
一、Tomcat目录介绍
前面有写过Centos下安装Tomcat。那么如果希望在一台机器上跑多个Tomcat实例,该怎么办呢?
安装好之后,进入安装目录查看目录结构:
简单介绍一下各个文件夹及文件:
- bin:主要存放脚本文件,例如比较常用的windows和linux系统中启动和关闭脚本
- conf:主要存放配置文件,其中最重要的两个配置文件是server.xml和web.xml
- lib:主要存放tomcat运行所依赖的包
- LICENSE:版权许可证,软件版权信息及使用范围等信息
- logs:主要存放运行时产生的日志文件,例如catalina.out(曾经掉过一个大坑)、catalina.{date}.log等
- NOTICE:通知信息,一些软件的所属信息和地址什么的
- RELEASE-NOTES:发布说明,包含一些版本升级功能点
- RUNNING.txt:运行说明,必需的运行环境等信息
- temp:存放tomcat运行时产生的临时文件,例如开启了hibernate缓存的应用程序,会在该目录下生成一些文件
- webapps:部署web应用程序的默认目录,也就是 war 包所在默认目录
- work:主要存放由JSP文件生成的servlet(java文件以及最终编译生成的class文件)
二、Tomcat 常见的几种部署场景
通常,我们在同一台服务器上对 Tomcat 部署需求可以分为以下几种:单实例单应用,单实例多应用,多实例单应用,多实例多应用。实例的概念可以理解为上面说的一个 Tomcat 目录。
- 单实例单应用:比较常用的一种方式,只需要把你打好的 war 包丢在
webapps
目录下,执行启动 Tomcat 的脚本就行了。 - 单实例多应用:有两个不同的 Web 项目 war 包,还是只需要丢在
webapps
目录下,执行启动 Tomcat 的脚本,访问不同项目加上不同的虚拟目录。这种方式要慎用在生产环境,因为重启或挂掉 Tomcat 后会影响另外一个应用的访问。 - 多实例单应用:多个 Tomcat 部署同一个项目,端口号不同,可以利用 Nginx 这么做负载均衡,当然意义不大。
- 多实例多应用:多个 Tomcat 部署多个不同的项目。这种模式在服务器资源有限,或者对服务器要求并不是很高的情况下,可以实现多个不同项目部署在同一台服务器上的需求,来实现资源使用的最大化。-
三、Tomcat多实例部署
官方推荐多实例部署图
配置多实例
新建2个tomcat实例,ins01和ins02,文件目录如下:
主要需要修改的配置为conf/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;
ins01配置:
1 2 3 4 5 6 7 8 9 10 11 12 | <Server port= "8005" shutdown= "SHUTDOWN" > <Connector port= "8081" protocol= "HTTP/1.1" connectionTimeout= "20000" redirectPort= "8443" /> <Connector executor= "tomcatThreadPool" port= "8081" protocol= "HTTP/1.1" connectionTimeout= "20000" redirectPort= "8443" /> <Connector port= "8009" protocol= "AJP/1.3" redirectPort= "8443" /> |
ins02配置:
1 2 3 4 5 6 7 8 9 10 11 12 | <Server port= "8015" shutdown= "SHUTDOWN" > <Connector port= "8082" protocol= "HTTP/1.1" connectionTimeout= "20000" redirectPort= "8443" /> <Connector executor= "tomcatThreadPool" port= "8082" protocol= "HTTP/1.1" connectionTimeout= "20000" redirectPort= "8443" /> <Connector port= "8019" protocol= "AJP/1.3" redirectPort= "8443" /> |
启停脚本
start.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/bin/bash export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.31 export CATALINA_BASE=${1%/} echo $CATALINA_BASE 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}) still running now , please shutdown it first" ; 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 |
stop.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/bin/bash export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.31 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 |
启动多实例
[root@localhost tomcat]# /usr/local/tomcat/tomcat-start-stop/start.sh /usr/local/tomcat/tomcat-ins01
/usr/local/tomcat/tomcat-ins01
/usr/local/tomcat/tomcat-start-stop/start.sh /usr/local/tomcat/tomcat-ins01 start succeed
[root@localhost tomcat]# /usr/local/tomcat/tomcat-start-stop/start.sh /usr/local/tomcat/tomcat-ins02
/usr/local/tomcat/tomcat-ins02
/usr/local/tomcat/tomcat-start-stop/start.sh /usr/local/tomcat/tomcat-ins02 start succeed
[root@localhost tomcat]#
查看启动情况
配置多实例网站
部署ins01
1 2 3 4 5 6 7 | cat tomcat-ins01/webapps/ROOT/index.jsp <html> <title>Tomcat-1</title> <body> Hello Boy! from Tomcat-1. </body> </html> |
部署ins02
1 2 3 4 5 6 7 | [root@localhost tomcat]# cat tomcat-ins02/webapps/ROOT/index.jsp <html> <title>Tomcat-1</title> <body> Hello Boy! from Tomcat-2. </body> </html> |
访问多实例网站
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」