1. 程式人生 > >一臺Linux伺服器上同時部署多個Tomcat方法需要注意事項

一臺Linux伺服器上同時部署多個Tomcat方法需要注意事項

一、原理講解:

  tomcat啟動可以通過兩個指令碼分別進行啟動  ./startup.sh 或者 catalina.sh run  形式執行啟動

  其實startup.sh的啟動也是呼叫的catalina.sh,然後去啟動的,所以我們需要關注的就是catalina.sh檔案

1  首先 tomcat在啟動的時候會查詢tomcat的安裝目錄,也就是它的根目錄,然後通過CATALINA_BASE和CATALINA_HOME 這兩個變數去查詢,所以一臺伺服器上的多臺不同tomcat的根目錄以及上述兩個變數的值是不一樣的,因此我們要設定一下上面的兩個變數。

2 下一步就是設定每一臺伺服器的三個埠,要讓每臺tomcat的該三個對應的埠都不一樣,這樣才能保證同時啟動多臺tomcat成功

二、詳細步驟

1. 修改/etc/profile檔案

需要在檔案中新增多組CATALINA環境變數(有幾個tomcat就新增幾組)。

####第一個Tomcat####
export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-8.5.6
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.6
export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.6

####第二個Tomcat####
export CATALINA_2_BASE=/usr/local/tomcat2/apache
-tomcat-8.5.6 export CATALINA_2_HOME=/usr/local/tomcat2/apache-tomcat-8.5.6 export TOMCAT__2_HOME=/usr/local/tomcat2/apache-tomcat-8.5.6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

如果有多個tomcat,方法一樣,繼續往下新增即可。

記得修改完要用source /etc/profile使其生效。

2. 修改其他tomcat(除了第一個tomcat)根目錄bin下的catalina.sh檔案

具體操作是切換到tomcat2的bin目錄下,vim catalina.sh,找到下面的註釋程式碼

# OS specific support.  $var _must_ be set
to either true or false.
  • 1

並在上述程式碼下面新增以下程式碼,目的是為了tomcat2啟動的時候能通過該檔案的裡的$CATALINA_2_BASE 和 $CATALINA_2_HOME找到/etc/profile配置檔案裡我們前一步配好的具體路徑,完成tomcat2的啟動過程。

# myself : add
export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME
  • 1
  • 2
  • 3

如果有多個tomcat,修改方法是一樣的。

3. 修改埠號

除了第一個tomcat使用的預設配置好的埠號(如果有需要也可以修改),後面新增的tomcat都要通過其根目錄下的conf目錄下的server.xml檔案來修改埠號防止埠衝突。

  • http訪問埠(預設為8080埠):
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  • 1
  • 2
  • 3
  • 監聽tomcat關閉的埠(預設為8005):
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  • 1
  • 2
  • 負責接收其他http伺服器的請求埠(預設為8009):
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  • 1

修改完埠之後,要重啟tomcat,並且在防火牆裡也要開放以上埠。

最後,按照上面的步驟如果還不能正常的同時執行多個tomcat,可能是雲伺服器的問題,由於我用的阿里雲的伺服器,後來我在雲伺服器上添加了安全組規則,將其他tomcat需要開放的埠(比如我tomcat2和tomcat3用到的http的訪問埠是6060和7070),新增到安全組規則裡,試了下就可以了。

因之前一篇文章中也有一種多tomcat啟動的方式,在tomcat/bin/目錄下 建立一個setenv.sh檔案,也可以完成多tomcat的部署,但是這種方法有個問題,就是我們自定義使用shell指令碼去啟動tomcat的時候,就會丟擲錯誤,具體錯誤說 tomcat/bin/setclasspath.sh檔案不存在,不知道為什麼日誌中列印的該路徑並沒有指向tomcat的根目錄,所以後來就修改成了上面的方式,使用自定義shell就ok啦