Tomcat单机多实例部署-多项目部署

博文说明【前言】:

本文将通过个人口吻介绍Tomcat单机多实例部署,在目前时间点【2017年8月13号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容。

本文参考文献及引用文章链接:

1、http://wiki.jikexueyuan.com/project/tomcat/ 【Tomcat 8 权威指南-极客学院出品】

2、《Tomcat 权威指南》

2、http://www.cnblogs.com/mafly/p/tomcat.html



正文:

期望实现功能:
1、更新升级:周期性地更新Tomcat,使用最新版的Tomcat
2、统一管理,让Tomcat版本统一,实例的配置统一
3、多个项目使用不同端口号进行区分,并且互相不影响,并且对于bin/、lib/等公共数据共享使用,节约系统资源
4、Tomcat运行多实例,并且web应用放置到Tomcat的安装目录之外的单独目录,便于区分管理
5、对一个项目的停止启动等不会影响到其他项目

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

传统实现方式:简单的复制出一个新的Tomcat目录后改一下端口
缺点:
1、资源浪费,公用资源被多次加载,造成在内存中不必要的重用
2、针对不同web服务做配置能做但是异常麻烦
3、对Tomcat进行版本升级时能做但是异常麻烦,每个目录都需要替换,不必要的大量工作

Tomcat运行机制:

2个变量:
CATALINA_HOME:Tomcat的安装路径,只需要包含bin/及lib/目录即可
CATALINA_BASE:Tomcat实例所在路径,只需要包含conf、webapps、logs、temp、work目录即可
因此我们可以在不影响Tomcat实例运行的情况下,替换掉$CATALINA_HOME中的文件即可完成升级

具体实施

1、解压安装包
[[email protected] ~]$ pwd
/home/tomcat
[[email protected] ~]$ ls
apache-tomcat-8.5.16  apache-tomcat-8.5.16.tar.gz
[[email protected] ~]$

2、创建实例目录及脚本目录
[[email protected] ~]$ mkdir tomcat-1 tomcat-2 tomcat-shell
[[email protected] ~]$ ls
apache-tomcat-8.5.16  apache-tomcat-8.5.16.tar.gz  tomcat-1  tomcat-2  tomcat-shell

3、移动实例所需文件及目录到2个实例目录中
[[email protected] ~]$ cd apache-tomcat-8.5.16
[[email protected] apache-tomcat-8.5.16]$ ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[[email protected] apache-tomcat-8.5.16]$ mv conf/ webapps/ temp/ logs/ work/ ../tomcat-1
[[email protected] apache-tomcat-8.5.16]$ cd ..
[[email protected] ~]$ cp -a tomcat-1/* tomcat-2/

4、新建Tomcat启动、停止脚本
[[email protected] ~]$ cd tomcat-shell/

1)启动脚本
[[email protected] tomcat-shell]$ vim start_tomcat.sh
#!/bin/bash
#description: This script is for start tomcat instance, $1 is the tomcat/web instance directory
#history: 2017/8/13    first release
#author: wang xiaohua
#contact: [email protected]

source /etc/profile
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

export CATALINA_HOME=/home/tomcat/apache-tomcat-8.5.16
export CATALINA_BASE=${1%/}
export log=$CATALINA_BASE/startup.log
# use %/ is for next grep match
echo $CATALINA_BASE
Tomcat_PID=$(ps aux | grep "java" | grep -v "grep"  | grep "Dcatalina.base=${CATALINA_BASE}"  |awk ‘{print $2}‘)

if [ -n "$Tomcat_PID" ];then
    echo "The tomcat instance $CATALINA_BASE is running,please checkout the status";
    exit 1;
fi
/usr/bin/sh $CATALINA_HOME/bin/startup.sh > $log 2>&1

if [ "$?" = 0 ];then
    echo "The tomcat instance $CATALINA_BASE start succeed!!!";
else
    echo "The tomcat instance $CATALINA_BASE start faild!!!"
    tail -f $log
fi

2)停止脚本
[[email protected] tomcat-shell]$ vim stop_tomcat.sh

#!/bin/bash
#description: This script is for stop tomcat instance, $1 is the tomcat/web instance directory
#history: 2017/8/13    first release
#author: wang xiaohua
#contact: [email protected]

source /etc/profile
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

export CATALINA_HOME=/home/tomcat/apache-tomcat-8.5.16
export CATALINA_BASE=${1%/}
export log=$CATALINA_BASE/stop.log
# use %/ is for next grep match
echo $CATALINA_BASE
Tomcat_PID=$(ps aux | grep "java" | grep -v "grep"  | grep "Dcatalina.base=${CATALINA_BASE}"  |awk ‘{print $2}‘)

if [ -n "$Tomcat_PID" ];then
    /usr/bin/sh $CATALINA_HOME/bin/shutdown.sh > $log 2>&1
else
    echo "The tomcat instance $CATALINA_BASE is not running,please checkout the status"
    exit 1;

fi

if [ "$?" = 0 ];then
    echo "The tomcat instance $CATALINA_BASE stop succeed!!!";
else
    echo "The tomcat instance $CATALINA_BASE stop faild!!!"
    tail -f $log
fi

[[email protected] tomcat-shell]$ chmod +x start_tomcat.sh  stop_tomcat.sh

3)可以整合到一块,写成函数,添加重启功能,先停止再启动,这里没有写,留给你们发挥。

5、配置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;

在这里讲tomcat-2的端口设置为8081,tomcat-1使用默认的8081

[[email protected] conf]$ pwd
/home/tomcat/tomcat-2/conf
[[email protected] conf]$ vim server.xml

69     <Connector port="8081" protocol="HTTP/1.1"

只修改这一行即可

6、启动tomcat实例
[[email protected] tomcat-shell]$ sh start_tomcat.sh /home/tomcat/tomcat-1/
/home/tomcat/tomcat-1
The tomcat instance /home/tomcat/tomcat-1 start succeed!!!

[[email protected] tomcat-shell]$ sh start_tomcat.sh /home/tomcat/tomcat-2
/home/tomcat/tomcat-2
The tomcat instance /home/tomcat/tomcat-2 start succeed!!!

[[email protected] tomcat-shell]$ lsof -i:8080
COMMAND  PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    7557 tomcat   48u  IPv4 1810551      0t0  TCP *:webcache (LISTEN)
[[email protected] tomcat-shell]$ lsof -i:8081
COMMAND  PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    7617 tomcat   48u  IPv4 1810751      0t0  TCP *:tproxy (LISTEN)

[[email protected] webapps2]# ps aux | grep java | grep -v grep | awk ‘{print $2}‘
7557
7617

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



结尾:

     感谢阅读,祝有收获的一天,谢谢!

时间: 2024-10-11 21:43:15

Tomcat单机多实例部署-多项目部署的相关文章

Docker 快速验证 tomcat 单机多实例方案

概述 主要讲的是解决问题的思路.当然也附带了尽可能详细的步骤,感兴趣的童鞋可以一步一步跟着来实践一把.因为运维职业的缘故,基本上是把事故当故事来写了,希望能够喜欢. 缘起 至少10年了,没在一线玩过 Tomcat 了,这次客户现场就来了一场遭遇战.虽然客户说了他来搭建,但是项目进度不等人,还是自己动手吧.当然了,新服务器是要走流程申请的,只能在现有服务器想办法.犹记得当年解决 Tomcat 部署这些都是小菜,没想到在苛刻的商业环境中,处处是坑,步步有雷.不过,咱干过开发也干过运维,这点儿动手的事

[转载]Tomcat单机多实例配置

Tomcat单机多实例配置 当一个进程的线程超过500个的话,那么这个进程的运行效率会变得很低.因为一个进程产生过多的线程,CPU资源会浪费在线程间切换过程当中.但当服务器配置很高的情况下,如:32G内存,16核的CPU.这样一台高配的机器上只装一个Tomcat实例,会有点浪费.其实我们可以根据服务器的硬件配置,配置多个Tomcat实例,充分利用硬件的资源.你第一时间可能会想到,直接下载多份Tomcat安装包,直接解压,改下端口跑起来不就可以了? 这样也是可以的,但不好维护.假设你在一台机器上安

tomcat单机多实例

catalina.home指向公用信息的位置,就是bin和lib的父目录. catalina.base指向每个Tomcat目录私有信息的位置,就是conf.logs.temp.webapps和work的父目录. 仅运行一个Tomcat实例时,这两个属性指向的位置是相同的. tomcat单机多实例的部署. 步骤如下: 1.下载一个免安装版本的tomcat7. 2.在tomcat目录创建一个tomcat-ins文件夹,该文件夹作为多实例的根目录. 3.分别针对每个实例创建自己的tomcat目录文件夹

Tomcat 初探(三)多项目部署

扯淡 昨天房东找我说最近物价飞涨,房租也得涨,混不下去了,得要求老板涨工资.一大清早就去找老板,老板看了看我,让我发布先两个网站:一个前台网站 frontend,给用户用:一个后台管理网站 backend,给管理员用,两个网站要在同一台服务器上部署两个网站,但服务器上只有一个 tomcat,怎么办? 相同端口的多项目部署 还找我之前了解了 server.xml 中各个节点的作用,正好派上用场,可以通过设置不同的 path 让其匹配到相应的 context,嗯,就这么搞,开个8001端口,修改 c

windows+ant+git+tomcat中ant直接获取git项目部署注意点

最近项目搬迁到公司的"GitHub"上面原来的SVN的ant发布脚本要改下,于是百度ant获取git的方法太少了,windows平台上更是没有所以搞了两天,今天终于有点成果分享给大家. 1.服务器上也要安装git,还要配置git环境,在Path中加上C:\Program Files (x86)\Git\cmd(你的路径可能不同,就是Git\cmd路径) 2.GitHub上有两种路径http的那个要用户密码,我是没研究出来bat脚本自动输入密码,所以用git开头的路径 3.把公钥.ssh

Tomcat单机多实例配置

配置多实例目录: 安装好tomcat后,创建三个实例目录,将主站点的:conf. work .temp.logs目录分别复制到3个实例目录下. 1 [[email protected] tomcat]# mkdir {bbs.fox.com,www.fox.com,e-mail.fox.com} 2 [[email protected] tomcat]# cp -r conf logs temp work ./bbs.fox.com 3 [[email protected] tomcat]# c

tomcat单机多实例 supervisord管理 脚本

#!/bin/bash systemctl stop firewalld setenforce 0 setenforce 0 yum -y install epel-release yum -y install supervisor touch /etc/supervisord.d/tomcat.ini echo > /etc/supervisord.d/tomcat.ini java -version > /dev/null if [ $? -ne 0 ];then cd /opt/ rpm

myeclipse部署web项目部署按钮无效

找到MyEclipse的工作路径,我的是"E:\Java",到这个目录中去"\.metadata\.plugins\org.eclipse.core.runtime\.settings"找一个含有deploy的.prefs文件删除即可(com.genuitec.eclipse.ast.deploy.core.prefs).重新启动MyEclipse就可以了.

【转载】centos7+tomcat部署JavaWeb项目超详细步骤

我们平时访问的网站大多都是发布在云服务器上的,比如阿里云.腾讯云等.对于新手,尤其是没有接触过linux系统的人而言是比较有困难的,而且至今使用云服务器也是有成本的,很多时候我们可以通过虚拟机自己搭建一个测试服务器来运行我们的javaWeb项目.这里我就从头到尾开始详细的介绍一下如何部署javaWeb项目到centos7上. 总体分为三部分:1.java环境.2.tomcat环境.3.JavaWeb项目部署 一.安装java环境 centos7安装java环境比较简单,我是通过virtualBo