Tomcat多實例部署


前言

  以前總是采用很Low的方式太同一台服務器上部署多個Web應用,步驟是這樣的:Copy Tomcat目錄-->更改conf/server.xml三個端口號----->部署war包----->分別啟動訪問

  這樣是最簡單的方式,但事實上是不推薦的,因為如果服務器資源有限,需要部署的應用數目一旦增加,會給服務器帶來負擔,我們可以充分利用Tomcat服務器的性能,減少資源浪費。具體的做法就是采用“Tomcat多實例”部署多應用:創建Tomcat多實例---->更改conf/server.xml三個端口號----->部署應用------>編寫啟動/關閉腳本------->分別啟動實例並訪問。在動手實踐之前,需要對一些基本概念清楚,比如$CATALINA_HOME與$CATALINA_BASE分別指?webapps下的example、docs、ROOT目錄能刪除嗎?

  參考資料《Tomcat架構解析》(我這里只有帶標簽的PDF電子版,有需要的小伙伴也可以私信或者評論我)

  

 


 

 

一、Tomcat部署的基本概念

  1. CATALINA_HOME與CATALINA_BASE分別指什么?

    CATALINA_HOME指的是Tomcat的安裝目錄,在Windows下Tomcat的安裝目錄如下:

    

    bin:Tomcat一些腳本存放目錄,比如啟動腳本startup.bat/startup.sh等

    conf:Tomcat配置文件所在目錄,最主要的就是server.xml與web.xml

    lib:主要存放Tomcat依賴包

    logs:Tomcat日志所在目錄。以為catalina、host-manager等開頭日志

    temp:存放Tomcat運行時的臨時文件,通常放一些緩存文件,一般不要刪除

    webapps:應用部署所在目錄,就是在這里存放我們需要部署的文件目錄、WAR包

    work:存放由JSP文件生成的Servlet

    RUNNING.txt:運行說明,必需的一些環境信息

    NOTICE:通知信息,軟件的版權信息等

    RELEASE-NOTES:發布說明,比如版本升級的功能說明

    LICENSE:版權許可證,軟件版權信息

    CATALINA_BASE指的是Tomcat的實例所在目錄,Tomcat的實例由除了bin、lib外的目錄組成

    兩者的對比圖如下一目了然,那么接下來配置多實例,也只需要Copy相應的目錄組成新的Tomcat實例即可。

    

 

 

  2. conf目錄下的配置文件具體用來做什么?

    

    Tomcat的配置需要分為:JVM配置、服務器配置、Web應用配置、Tomcat管理配置四個方面(其中JVM的配置一般在catalina.sh/catalina.bat中配置,這里不做介紹),這里只做簡單的介紹,不會具體介紹Tomcat配置

    1)服務器配置

      服務器配置主要集中於$CATALINA_HOME/conf下的catalina.policy、catalina.properties、context.xml、server.xml、tomcat-users.xml、web.xml文件。

    2)Web應用配置

      web.xml是Web應用的部署描述文件,它支持的元素及屬性來自於Servlet規范定義。在Tomcat中,Web應用的部署描述信息包括$CATALINA_BASE/conf/web.xml中的默認配置。

                 Tomcat的默認配置比Web應用定制配置負責很多,如果是完全基於JSP的Web應用不需要添加任何定制配置。主要包括ServletContext的初始化參數、會話配置、Filter定義與映射等

    3)Tomcat管理配置

      主要是針對host-manager 與manager兩個功能進行配置,在Tomcat中我們可以針對虛擬主機進行配置,也可以對我們的Web應用進行管理。

 

  3. webapps下的目錄哪些可以刪除?

    Windows下查看webapps下的,包括docs、ROOT、manager、host-manager、examples。webapps不一定是Tomcat部署web應用唯一的地方,可以在任何一處,但只需要做好映射即可(context.xml描述文件或者Host的appBase屬性可以做到)

    

    事實上,全部都可以刪除。為什么呢?這是因為

    1)ROOT:Tomcat本身默認的訪問http://{ip}:{port},也就是訪問http://127.0.0.1:8080標志性的Tomcat首頁所在之處

    2)manager:訪問http://{ip}:{port}/manager/html,可以管理部署應用(當然需要配置tomcat-users.xml文件)。一般部署Web應用往往是不需要的

       

    3)host-manager:訪問http://{ip}:{port}/host-manager/html,可以管理配置Host虛擬主機。一般簡單web應用部署也不會用到

      

    4)examples:Servlet、JSP、WebSocket示例,展示在Tomcat下如何使用等,訪問http://{ip}:{port}/examples/index.html即可進入。也是不需要的,可以刪除

     

      

    5)docs:Tomcat HTML文檔中心,不影響應用部署,可以刪除

 

  4. Tomcat為了避免端口沖突需要更改哪些端口?

  1)Server Port:該端口用於監聽關閉tomcat的shutdown命令,默認為8005
  

<Server port="8006" shutdown="SHUTDOWN">


  2)Connector Port:該端口用於監聽HTTP的請求,默認為8080

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

  

  3)AJP Port:該端口用於監聽AJP( Apache JServ Protocol )協議上的請求,通常用於整合Apache Server等其他HTTP服務器,默認為8009。實際上可以不用管,因為AJP基本用不到,特別是Ngxin與Tomcat集成時(Nginx沒有響應的支持AJP模塊,只有第三方模塊支持AJP協議)

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

  4)Redirect Port:重定向端口,出現在Connector配置中,如果該Connector僅支持非SSL的普通http請求,那么該端口會把 https 的請求轉發到這個Redirect Port指定的端口,默認為8443;

  

  簡單的應用部署為避免端口沖突,實際上只需要更改SHUTDOWN監聽端口與Connector鏈接器監聽端口即可

 

  5. Tomcat部署應用的方式有哪幾種?

  1) Context描述文件部署

  Tomcat支持通過一個獨立的Context描述文件配置並啟動Web應用,該文件的存儲路徑由Hot中xmlBase屬性指定,若不指定,則默認CATALINA_BASE/conf/<Engine名稱>/<Host名稱>,對於Tomcat默認的就是CATALINA_BASE/conf/Catalina/localhost

其實也就是conf/context.xml文件:Tomcat啟動時即會自動部署該Web應用

  2) Web部署

  即使以目錄的形式發布部署Web應用,復制到Host指定appBase目錄下即可完成部署。

  3) WAR包部署

  xxx.war包解壓成目錄形式而已,

 

二、多實例部署實踐

  主要以apache-tomcat-9.0.14為例,下載tar壓縮包。

  1. 部署安裝Tomcat

  在已經由JDK環境的CentOS下解壓tomcat包即可

  

  解壓命令如下:

tar -zxvf apache-tomcat-9.0.14.tar.gz

 

  2. 創建多實例

  創建tomcat_instance存放tomcat_1、tomcat_2與tomcat_bin腳本

  

創建tomcat_1與tomcat_2實例,將conf webapps等文件copy到實例下的命令:
mkdir tomcat_instance tomcat_instance/tomcat_1 tomcat_instance/tomcat_2 tomcat_instance/tomcat_bin
cd apache-tomcat-9.0.14
mv conf/ webapps/ temp/ logs/ work/ -t ../tomcat_1
mv conf/ webapps/ temp/ logs/ work/ -t ../tomcat_2

 

  3. 更改端口

  進入tomcat_1/conf與tomcat_2/conf/下更改server.xml端口的SHUTDOWN命令監聽端口與Connector鏈接器監聽端口

  tomcat_1/conf/server.xml:

  

  

  tomcat_2/conf/server.xml

  

  

 

  4. 編寫腳本

  創建啟動、關閉腳本(也可以重啟腳本),進入tomcat_bin/ 分別創建startup.sh與shutdown.sh

  

  startup.sh的shell腳本代碼如下:

# 指定CATALINA_HOME
export CATALINA_HOME=/home/tomcat/apache-tomcat-9.0.14
# 通過參數的形式輸入tomcat實例路徑 export CATALINA_BASE=${1%/} echo $CATALINA_BASE
# 找到tomcat實例的進程ID 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}) is running now , please shutdown it!"; 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的腳本代碼如下:

export CATALINA_HOME=/home/tomcat/apache-tomcat-9.0.14
export CATALINA_BASE=${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

 

  5. 部署應用

  部署應用就跟平常一樣在webapps下部署,或者context.xml描述文件映射等,我們現在為了測試,簡單引入html文件到ROOT目錄下,啟動之后分別訪問http://{ip}:8081、http://{ip}:8082

  tomcat實例1 index.jsp首頁

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Tomcat 多實例測試</title>
</head>
<body>
   <h1>Tomcat Instance 1</h1>
</body>
</html>

 

  tomcat實例2 index.jsp首頁

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Tomcat 多實例測試</title>
</head>
<body>
   <h1>Tomcat Instance 2</h1>
</body>
</html>

  6. 啟動應用

  啟動腳本,傳入正確實例路徑,啟動兩個tomcat實例。

  啟動tomcat實例1

  

  啟動tomcat實例2

  

 

  7. 訪問應用

  訪問http://{ip}:8081

   

  訪問http://{ip}:8082

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM