博文說明【前言】:
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是不一樣的,也就是說對某個實例進行操做是不會影響到另一個實例的
結尾:
感謝閱讀,祝有收穫的一天,謝謝!