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

博文说明【前言】:
html

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


本文参考文献及引用文章连接:web

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

二、《Tomcat 权威指南》apache

二、http://www.cnblogs.com/mafly/p/tomcat.htmlvim



正文:tomcat


指望实现功能:
一、更新升级:周期性地更新Tomcat,使用最新版的Tomcat
二、统一管理,让Tomcat版本统一,实例的配置统一
三、多个项目使用不一样端口号进行区分,而且互相不影响,而且对于bin/、lib/等公共数据共享使用,节约系统资源
四、Tomcat运行多实例,而且web应用放置到Tomcat的安装目录以外的单独目录,便于区分管理
五、对一个项目的中止启动等不会影响到其余项目bash


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

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

Tomcat运行机制:服务器

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


具体实施

一、解压安装包
[tomcat@master ~]$ pwd
/home/tomcat
[tomcat@master ~]$ ls
apache-tomcat-8.5.16  apache-tomcat-8.5.16.tar.gz
[tomcat@master ~]$

二、建立实例目录及脚本目录
[tomcat@master ~]$ mkdir tomcat-1 tomcat-2 tomcat-shell
[tomcat@master ~]$ ls
apache-tomcat-8.5.16  apache-tomcat-8.5.16.tar.gz  tomcat-1  tomcat-2  tomcat-shell

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

四、新建Tomcat启动、中止脚本
[tomcat@master ~]$ cd tomcat-shell/app

1)启动脚本
[tomcat@master 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: wxh2673@163.com

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)中止脚本
[tomcat@master 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: wxh2673@163.com

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

[tomcat@master tomcat-shell]$ chmod +x start_tomcat.sh  stop_tomcat.sh

3)能够整合到一块,写成函数,添加剧启功能,先中止再启动,这里没有写,留给大家发挥。

五、配置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

[tomcat@master conf]$ pwd
/home/tomcat/tomcat-2/conf
[tomcat@master conf]$ vim server.xml 


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

只修改这一行便可


六、启动tomcat实例
[tomcat@master tomcat-shell]$ sh start_tomcat.sh /home/tomcat/tomcat-1/
/home/tomcat/tomcat-1
The tomcat instance /home/tomcat/tomcat-1 start succeed!!!

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

[tomcat@master 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)
[tomcat@master 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)

[root@master webapps2]# ps aux | grep java | grep -v grep | awk '{print $2}'
7557
7617

能够看到2个tomcat实例的PID是不一样的,也就是说对某个实例进行操做是不会影响到另一个实例的




结尾:


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

相关文章
相关标签/搜索