Tomcat单机多实例部署

Tomcat 常见的几种部署场景

通常,我们在同一台服务器上对 Tomcat 部署需求可以分为以下几种:单实例单应用,单实例多应用,多实例单应用,多实例多应用。实例的概念可以理解为上面说的一个 Tomcat 目录。

  • 单实例单应用:比较常用的一种方式,只需要把你打好的 war 包丢在 webapps目录下,执行启动 Tomcat 的脚本就行了。
  • 单实例多应用:有两个不同的 Web 项目 war 包,还是只需要丢在webapps目录下,执行启动 Tomcat 的脚本,访问不同项目加上不同的虚拟目录。这种方式要慎用在生产环境,因为重启或挂掉 Tomcat 后会影响另外一个应用的访问。
  • 多实例单应用:多个 Tomcat 部署同一个项目,端口号不同,可以利用 Nginx 这么做负载均衡,当然意义不大。
  • 多实例多应用:多个 Tomcat 部署多个不同的项目。这种模式在服务器资源有限,或者对服务器要求并不是很高的情况下,可以实现多个不同项目部署在同一台服务器上的需求,来实现资源使用的最大化。

这次实验也是做一个多实例多应用,单应用做负载均衡的话不需要考虑webapps目录,多个实例共用一个发布目录即可。

首先在tomcat安装目录创建三个目录用来分别存放3个不同的实例。

cd /usr/local/tomcat && mkdir test{1..3}

把安装路径下的 conf、webapps、temp、logs、work 这五个文件移动到tomcat-1实例中

mv conf/ webapps/ temp/ logs/ work/ -t test1/

再把这几个目录拷贝到实例2和3中

cp -r test1/* test2/ && cp -r test1/* test3/

可以查看一下目录结构

tree -d -L 2 /usr/local/tomcat/

在每一个实例目录下新建一个启动脚本

cd test1 && vim start.sh
#!/bin/bash
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE=/usr/local/tomcat/test1

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 firest";
    exit 2;
fi

TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh`


if [ "$?" = "0" ]; then
    echo "$0  启动成功"
else
    echo "$0  启动失败"
    echo $TOMCAT_START_LOG
fi

CATALINA_HOME:即指向Tomcat安装路径的系统变量
CATALINA_BASE:即指向活跃配置路径的系统变量通过设置这两个变量,就可以将tomcat的安装目录和工作目录分离,从而实现tomcat多实例的部署。
Tomcat官方文档指出,CATALINA_HOME路径的路径下只需要包含bin和lib目录,这也就是支持tomcat软件运行的目录,而CATALINA_BASE设置的路径可以包括上述所有目录,不过其中bin和lib目录并不是必需的,缺省时会使用CATALINA_HOME中的bin和conf。如此,我们就可以使用一个tomcat安装目录部署多个tomcat实例,这样的好处在于方便升级,就可以在不影响tomcat实例的前提下,替换掉CATALINA_HOME指定的tomcat安装目录。
 

然后是关闭脚本

vim stop.sh
#!/bin/bash
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE=/usr/local/tomcat/test1

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 : usr/local/tomcat/test1"
    exit

fi


if [ "$?" = "0" ]; then
    echo "$0 Tomcat1已停止运行"
else
    echo "$0 Tomcat1关闭失败"
    echo $TOMCAT_STOP_LOG
fi

赋予脚本执行权限

chmod a+x start.sh

chmod a+x stop.sh

将脚本拷贝到另外两个实例

cp start.sh stop.sh /usr/local/tomcat/test2 && cp start.sh stop.sh /usr/local/tomcat/test3

将拷贝过去的脚本里的路径和提示都修改成对应的实例2、3

 

之后就是修改配置文件,更改多个实例的端口

vim /usr/local/tomcat/test1/conf/server.xml

vim /usr/local/tomcat/test2/conf/server.xml

vim /usr/local/tomcat/test3/conf/server.xml

第一个修改点:<Server port="8015" shutdown="SHUTDOWN"> 修改为8015,8025,8035.......
第二个修改点:<Connector port="8081" protocol="HTTP/1.1" 修改为8081,8082,8083...........
第三个修改点:<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" /> 修改为8019,8029,8039........

<Server port="****" 管理实例端口
<Connector port="****" protocol="HTTP/1.1 提供web服务端口
<Connector port="****" protocol="AJP/1.3" 用于前端如Apache通过AJP方式连接tomcat的端口

分别在3个实例的 webapps/ROOT 目录下放入了一个页面文件,内容可以自己更改:(注意,这个页面文件必须叫  index.html )

<html>
<title>Tomcat1</title>
<body>
    Hello,Tomcat1.
</body>
</html>

分别启动三个实例

/usr/local/tomcat/test1/start.sh

/usr/local/tomcat/test2/start.sh

/usr/local/tomcat/test3/start.sh

最后通过网页访问,以端口区分

 

完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值