惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
IT之家
IT之家
Google DeepMind News
Google DeepMind News
D
Docker
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 【当耐特】
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
月光博客
月光博客
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

CAYZLH

Reasonix 开箱:聊聊我装的那些 Skill 收藏一份自驾中国的愿望清单 白夜行·谢幕 英雄联盟的昨日今天与符文大乱斗 折腾的尽头是极简 一个 `data.` 引发的血案——Redis 连接 localhost 问题排查全记录 MacBook上备忘录APP的快捷键和手势 让Google屏蔽某些搜索结果 WSL自定义安装Ubuntu typora自动上传图片配置 自建giscus服务 Windows下结束指定端口的进程 批量修改maven多模块版本号 使用winsw部署SpringBoot项目 Gson简易指南 docker搭建Consul集群 使用Docker部署SpringBoot项目 Docker使用redis镜像 Docker使用rabbitmq Docker使用zookeeper Docker使用MySQL Dockerfile常用指令 Docker免sudo操作 雷鸟电视去广告 使用ADB卸载MIUI系统应用 利用GitHub做图床 将网站变成灰色 Github上传大文件 Android远程调试命令adb vscode快捷键的使用
Tomcat单机多实例部署
Ant丶 · 2019-05-27 · via CAYZLH

前言

单机多实例部署tomcat, 可以充分利用系统资源, 周期性地更新Tomcat,使用最新版的Tomcat, 统一管理,让Tomcat版本统一, 实例的配置统一.

本文介绍Linux下Tomcat单机多实例的部署步骤.

实现四路

1、Tomcat运行时,系统会从conf及webapps目录中读取配置文件,并且写入logs、temp和work目录中
2、一些jar文件和class文件需要从公共目录例如lib/中加载,只需要加载一次就可以。
3、为了多个实例能同时运行,每一个Tomcat实例必须有自己的目录集

传统实现方式:简单的复制出一个新的Tomcat目录后改一下端口

缺点:
1、资源浪费,公用资源被多次加载,造成在内存中不必要的重用
2、针对不同web服务做配置能做但是异常麻烦
3、对Tomcat进行版本升级时能做但是异常麻烦,每个目录都需要替换,不必要的大量工作


实现步骤

下载并解压安装包到目录

cd /usr/local/path/tomcat

编辑 /etc/profile 文件

sudo vi /etc/profile

添加Tomcat

export CATALINA_HOME=/usr/local/path/tomcat/apache-tomcat-7.0.85

以上代码添加到profile

将在 /data/service/中创建两个实例文件夹

cd /data/service
mkdir tomcat1
mkdir tomcat2

tomcat的配置文件复制到实例文件夹内

cd tomcat1/
cp -a /usr/local/path/tomcat/* ./
rm -rf lib/ bin/

cd ..
cp -a tomcat1/* tomcat2/

cd /usr/local/path/tomcat
rm -rf work/ webapps/ logs/ conf/

此时

/usr/local/path/tomcat 内剩下文件为: bin/, lib/;
两个实例文件夹中剩下的文件为; work/ webapps/ logs/ conf/

创建运行脚本

cd /data/service/tomcat1
mkdir bin
cd bin/
touch startup.sh
touch shutdown.sh

编辑startup.shshutdown.sh

startup.sh :

#!/bin/bash

export CATALINA_BASE=/data/service/tomcat1

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 ${1%/} start succeed"
else
echo "$0 ${1%/} start failed"
echo $TOMCAT_START_LOG
fi

shutdown.sh :

rt CATALINA_BASE=/data/service/tomcat-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

至此, 单机多实例的tomcat已经基本上配置好了.

运行:

/data/service/tomcat1/bin/startup.sh

即可.

当然, 要运行两个以上实例的话, 还得配置 server.xml, 这里就不讨论了.

两个tomcat实例运行起来之后, 可以看到2个tomcat实例的PID是不同的,也就是说对某个实例进行操作是不会影响到另外一个实例的.