Tomcat多實例部署

来源:https://www.cnblogs.com/jian0110/archive/2019/03/12/10517576.html
-Advertisement-
Play Games

前言 以前總是採用很Low的方式太同一臺伺服器上部署多個Web應用,步驟是這樣的:Copy Tomcat目錄-->更改conf/server.xml三個埠號 >部署war包 >分別啟動訪問。 這樣是最簡單的方式,但事實上是不推薦的,因為如果伺服器資源有限,需要部署的應用數目一旦增加,會給伺服器帶來 ...


前言

  以前總是採用很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

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前沿 項目地址 "vue admin" 歡迎 star 近幾個月,接手了一個老項目的重構規劃,有多老呢?就是前端青銅時代的項目,一個前後端都在同一個鍋里的項目、完全沒有使用任何的打包工具。 後臺 + 渲染頁面 前端 、`css js jQuery` 複製粘貼就是乾。 前端不夠後端來湊。如果前端有一些 ...
  • 插槽用於內容分發,存在於子組件之中。 插槽作用域 父級組件作用域為父級,子級組件作用域為子級,在哪定義的作用域就在哪。 子組件之間的內容是在父級作用域的,無法直接訪問子組件裡面的數據。 插槽元素 <slot></slot> 或 <slot name="名稱">預設值</slot> 1:如果定義了sl ...
  • 原文地址 本文主要講述了使用JavaScript創建對象的幾種方式,分別是傳統的Object構造函數、對象字面量、工廠模式、構造函數模式、原型模式、組合模式,以及es6的class定義類。然後從babel的角度探究es5與es6創建對象的區別。 1.創建對象的幾種方式 (1).Object構造函數和 ...
  • 推薦8款最好用的前端開發工具供美工或者前端開發人員使用,當然若你是NB的全棧工程師也可以下載使用。 ...
  • 1.代碼 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 <title>OpenLayers</title> 6 <link re ...
  • 我們都都知道kafka的消費組要rebalance,需要觸發以下3個條件之一: 組成員變更,比如新consumer加入組,或已有consumer主動離開組,再或是已有consumer崩潰時則出發rebalance. 組訂閱topic數發生變更,比如使用基於正則表達式的訂閱,當匹配正則表達式的新top ...
  • 一、如何安裝Angular 在文件夾中打開cmd,輸入nmp init創建一個package.json。這個可以一路回車跳過(如果沒有特別要註明)。nmp是前臺的包,用於管理後臺。成功創建package.json後再輸入nmp install bower -g,bower推薦安裝到全局,這裡bowe ...
  • 近來經常用到分散式事務,這裡總結一下,我們目前的使用場景基本都是採用事務消息方式。那麼說到分散式不得不談的CAP CAP理論概述 一個分散式系統最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...