1. 程式人生 > >Tomcat單機多實例部署-多項目部署

Tomcat單機多實例部署-多項目部署

linux 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是不同的,也就是說對某個實例進行操作是不會影響到另外一個實例的




結尾:


感謝閱讀,祝有收獲的一天,謝謝!


本文出自 “清風攬月的博客” 博客,請務必保留此出處http://watchmen.blog.51cto.com/6091957/1955972

Tomcat單機多實例部署-多項目部署