Tomcat多實例部署

前言

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

  這樣是最簡單的方式,但事實上是不推薦的,由於若是服務器資源有限,須要部署的應用數目一旦增長,會給服務器帶來負擔,咱們能夠充分利用Tomcat服務器的性能,減小資源浪費。具體的作法就是採用「Tomcat多實例」部署多應用:建立Tomcat多實例---->更改conf/server.xml三個端口號----->部署應用------>編寫啓動/關閉腳本------->分別啓動實例並訪問。在動手實踐以前,須要對一些基本概念清楚,好比$CATALINA_HOME與$CATALINA_BASE分別指?webapps下的example、docs、ROOT目錄能刪除嗎?java

  參考資料《Tomcat架構解析》(我這裏只有帶標籤的PDF電子版,有須要的小夥伴也能夠私信或者評論我)web

  

 


 

 

1、Tomcat部署的基本概念

  1. CATALINA_HOME與CATALINA_BASE分別指什麼?

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

    

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

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

    lib:主要存放Tomcat依賴包tomcat

    logs:Tomcat日誌所在目錄。覺得catalina、host-manager等開頭日誌服務器

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

    webapps:應用部署所在目錄,就是在這裏存放咱們須要部署的文件目錄、WAR包app

    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包解壓成目錄形式而已,

 

2、多實例部署實踐

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

  1. 部署安裝Tomcat

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

  

  解壓命令以下:

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

 

  2. 建立多實例

  建立tomcat_instance存放tomcat_一、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}:808一、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

  

相關文章
相關標籤/搜索