一台主机运行多个tomcat实例

3/20/2024 2:30:57 PM
297
0

简单认识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实例即可。

copy: conf     webapps  work  到一个新的web站点根目录下

 

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应用进行管理。

 

修改tomcat的三个端口

为了运行多个tomcat,添加一个tomcat在默认端口的基础上加100,第二个tomcat在默认端口上加200,依次类推。一台服务器上端口不能重复,否则会报错。

8005

shutdown端口,默认8005,主要负责启动关闭。

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

8009

ajp端口,默认8009,主要负责通过ajp均衡 (常用于apache和tomcat整合)

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

http端口,默认8080,主要通过web页面直接访问(nginx+tomcata整合),编码UTF-8

<Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

配置Host和Context

Host

对一个Tomcat,可以配置多台虚拟主机,简单来说,就是让一台服务器可以对应多个主机名,这在Tomcat中称为Host,要求每个Host的Name必须唯一。

编辑配置文件

vim $CATALINA_HOME/conf/server.xml

添加如下内容

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
</Host>

说明

  • appBase指定了该虚拟主机上应用的部署位置,一般写相对于CATALINA_HOME的相对路径即可

Context

在一个Host上,可以部署多个应用。每个应用都有不同的Context Path,Context Path会出现在用户访问该应用的URL中,如下所示:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
	<Context docBase="ROOT" path="/admin" reloadable="true"></Context>
	<Context docBase="xxx-web" path="" reloadable="true"></Context>
	<Context docBase="/root/app/www_xxx" path="/xxx" reloadable="false" />
</Host>

启动脚本

#!/bin/sh
# tomcat实例目录
export CATALINA_BASE="/home/wwwroot/web目录"
# tomcat安装目录
export CATALINA_HOME="/opt/apache-tomcat-9.0.34"  

export JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"

# 可选
cd ${CATALINA_HOME}
./bin/catalina.sh start

停止脚本

#!/bin/bash
export CATALINA_HOME=/opt/apache-tomcat-9.0.34  #tomcat 安装目录
export CATALINA_BASE=/home/wwwroot/web目录     # 指的是实例名,如果只有一个就和home变量一样
cd ${CATALINA_HOME}
./bin/catalina.sh stop

另外一种可以通过传入启动目录的脚本

#启动脚本
#dome
#startup.sh  /home/wwwroot/web目录

# 指定CATALINA_HOME
export CATALINA_HOME=/home/service/apache-tomcat-9.0.34
# 通过参数的形式输入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
#停止服务的脚本
#demo
#shutdown.sh  /home/wwwroot/web目录

export CATALINA_HOME=/home/service/apache-tomcat-9.0.34
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

扩展阅读:liunx下java和net的启动脚本

全部评论



提问