同一个tomcat下部署多个项目,重启会影响到其他项目的正常运行,为了使各项目独立,一般会使用安装多个tomcat,这样很耗费系统资源;创建tomcat多实例,有效的解决这一问题;
常见部署方式
单实例单应用:比较常用的一种方式,只需要把你打好的 war 包丢在 webapps目录下,执行启动 Tomcat 的脚本就行了。
单实例多应用:有两个不同的 Web 项目 war 包,还是只需要丢在webapps目录下,执行启动 Tomcat 的脚本,访问不同项目加上不同的虚拟目录。这种方式要慎用在生产环境,因为重启或挂掉 Tomcat 后会影响另外一个应用的访问。
多实例单应用:多个 Tomcat 部署同一个项目,端口号不同,可以利用 Nginx 这么做负载均衡,当然意义不大。
多实例多应用:多个 Tomcat 部署多个不同的项目。这种模式在服务器资源有限,或者对服务器要求并不是很高的情况下,可以实现多个不同项目部署在同一台服务器上的需求,来实现资源使用的最大化。
目录作用
bin 主要存放脚本文件,例如比较常用的windows和linux系统中启动和关闭脚本
conf 主要存放配置文件,其中最重要的两个配置文件是server.xml和web.xml
lib 主要存放tomcat运行所依赖的包
logs 主要存放运行时产生的日志文件,例如catalina.{date}.log等
temp 存放tomcat运行时产生的临时文件,例如开启了hibernate缓存的应用程序,会在该目录下生成一些文件
webapps 部署web应用程序的默认目录
work 主要存放由JSP文件生成的servlet(java文件以及最终编译生成的class文件)
CATALINA_HOME:即指向Tomcat安装路径的系统变量
CATALINA_BASE:即指向活跃配置路径的系统变量
通过设置这两个变量,就可以将tomcat的安装目录和工作目录分离,从而实现tomcat多实例的部署。
将tomcat复制为以下目录结构
修改$CATALINA_HOME/conf/server.xml
在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
修改第22行Server Port (三个tomcat依次修改为8005,8006,8007)
1 | <Server port="8007" shutdown="SHUTDOWN"> |
修改第71行Connector Port(三个tomcat依次修改为8080,8081,8082)
1 | <Connector port="8082" protocol="HTTP/1.1" |
修改第93行AJP Port (三个tomcat依次修改为8009,8019,8029)
1 | <Connector port="8029" protocol="AJP/1.3" redirectPort="8443" /> |
虚拟主机配置
name: 虚拟主机的名称,一台主机表示了完全限定的域名或IP地址,默认为localhost,同时也是唯一的host,进入tomcat的所有http请求都会映射到该主机上
appBase: web应用程序目录的路径,可以是CATALINA_HOME的相对路径,也可以写成绝对路径,默认情况下为$CATALINA_HOME/webapps
unpackWARs: 表示是否自动解压war包
autoDeploy: 所谓的热部署,即在tomcat正在运行的情况下,如果有新的war加入,则会立即执行部署操作
deployOnStartup: 表示tomcat启动时是否自动部署appBase目录下所有的Web应用程序,默认为true。这个属性和autoDeploy会产生两次部署的“副作用”:一次是tomcat启动时就开始部署,第二次就是autoDeploy引起的热部署。因此最好将autoDeploy置为false
修改第125-127行虚拟主机配置 (三个tomcat参考以下内容依次修改)
1 | <Host name="c.com" appBase="/data/tomcat/c.com/" |
启动&关闭脚本
脚本放在CATALINA_BASE(如:/opt/tomcat1/)下
1 | #!/bin/sh |
因为启动脚本中有获取当前路径的操作,一定需要cd到tomcat.sh的当前目录下执行才可以
1 | cd /opt/tomcat1 |
访问8080,8081,8082端口验证
参考地址:
http://www.jianshu.com/p/0b549d00ecc2
http://www.ttlsa.com/tomcat/config-multi-tomcat-instance/