單Tomcat的多實例配置原理及應用


轉自 http://www.cher7.com/?id=12919

 

我們常有在JAVAWeb應用部署或依賴Tomcat應用中遇到單機多實例的需求,解決方案一般有:

1、復制Tomcat到不同目錄,更改Server.xml等配置文件

2、部署不同應用實例到webapps目錄下或直接將多項目部署到同一Tomcat實例中

以此解決多項目部署問題,不能說以上兩種解決方案不對,只是這種解決思路有以下幾個問題:

  1. 復制多Tomcat難於維護。兩三個實例還好說,如果配置十個以上的實例,那對於統一啟動、Tomcat版本升級或更改配置將變得讓維護人員很頭疼;
  2. 復制Tomcat方法對日志系統不能統一管理。所有Tomcat都在生成logs文件夾的日志,比如Catalina.out等,日志文件也各自己維護自己的,一方面時間日志過於多且大,且不方面統一處理;
  3. 復制多Tomcat資源消耗大。
  4. 對於多項目同時部署到Tomcat webapps目錄下的解決,項目與項目間依賴度太高,不方便統一調試或日志跟蹤於定位
  5. 如果項目中存在過於多的單例,多項目同時有依賴且部署在同一webapps目錄下,則可能導致項目無法正常運行或頻繁出BUG
  6. 項目復制在同一webapps下,對於熱加載和熱部署也造成了很大的困難。雖然Tomcat管理可以實現熱部署,但是對於實際線上項目,生成war包進行熱部署,Tomcat自帶的熱部署功能便顯得不盡人意。

為了解決以上問題,勾勾手對Tomcat啟動及加載進行了一些探索,實現了另一種途徑解決以上問題,即對單Tomcat部署多實例,當然對此很多前輩們早已了如指掌,但發現沒人很多相關資料統一講解和分享,勾勾手在這里就簡單的給大家分享一下。單Tomcat部署多實例有以下優點:

1、 所有項目只應用單一Tomcat,對於項目啟動、Tomcat升級可一次性解決,不需要更改過多配置

2、 單一Tomcat日志存儲既不在是問題,可統一跟蹤及處理

3、 多實例無依賴,可做到單實例下線或維護,不影響其它實例運行,方便管理

4、 對多實例間單例不會造成任何影響

5、 可實現自定義單一實例熱加載熱部署,不會對其它實例造成影響

原理講解

通過Tomcat的Docs可以得知,Tomat的啟動入口類為org.apache.catalina.startup.Bootstrap(以下簡稱Bootstrap),且依賴於server.xml,從入口main中可得知,啟動時直接使用 start參數即可,默認調用Bootstrap的start方法,應用Tomcat 的conf目錄下server.xml。除了默認參數外,還可以加很多其它的參數這里就不一一詳述,有興趣的同學可以多去看看Tomcat的Docs文檔或直接閱讀源碼。這里我們只使用額外的一個參數 : -config ,此參數后邊帶的server.xml文件,也就是說我們可以通過這個參數來改變server.xml的目錄以達到多實例啟動的方法。原理就這么簡單,其實很多人也發現我們在用Eclipse的WTP插件時,配置的servers里面,每個Server都有自己的一套配置文件,但是我們可以通過一個Tomcat進行多次增加Server以達到多項目多實例測試。

應用

通過以上講解,我們可以將此應用在項目部署和Eclipse的Tomcat調試上,以下講解一下應用場景:

1、 項目部署

對於Linux,針對每個項目:

a)我們可以編寫以下腳本進行處理啟動過程

export LC_ALL="en_US.utf8" export LANG="en_US" #統一定義Tomcat目錄 TOMCAT_HOME=/home/dev/app/tomcat #tomcat echo "shutdown tomcat:" ${TOMCAT_HOME}/bin/shutdown.sh -config /home/deploy/項目名稱-server.xml sleep 2 kill -9 `ps –ef | grep -v grep | grep 'org.apache.catalina.startup.Bootstrap' | grep '項目名稱-server.xml' | awk '{print $2}'` echo "tomcat shutdown" echo "start up tomcat:please wait 20 seconds!" ${TOMCAT_HOME}/bin/startup.sh -config /home/dev/deploy/項目名稱-server.xml

b)復制server.xml更改配置

<Server port="8311" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="5511" maxHttpHeaderSize="8292" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="2443" acceptCount="100" connectionTimeout="8200" disableUploadTimeout="true" URIEncoding="GBK" useBodyEncodingForURI="true"/> <!-- Define an AJP 1.3 Connector on port 8209 --> <Connector port="8209" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8" useBodyEncodingForURI="true"/> <Engine name="Standalone" defaultHost="192.168.82.29" debug="0"> <Host name="192.168.82.29" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false" appBase=""> <Context docBase="項目目錄 " path="/項目名稱" reloadable="false" /> </Host> </Engine> </Service> </Server>

通過以上兩個步驟,即可簡單實現自定義啟動和部署多應用到Tomcat下了。

2、Eclipse應用

以下再講解Eclipse下不安裝Tomcat插件或直接安裝Tomcat插件時實現多實例啟動的應用。

a)我們只需要在Run里面配置一下RunConfigurations即可,看圖片

b)配置Tomcat參數,在此操作前先點右鍵Java Application,New一新的配置項,名字隨便起,如Tomcat6.x:

c)配置入口類:

d)配置項目參數:

e)配置Classpath:

f)配置調試源碼:

至此點擊Apply即可完成對Tomcat在Eclipse中的配置,如需要多個,可復制多份簡單改一下配置就可以了。
以上對Tomcat的多實例配置原理及應用就講解完了,如果有什么問題,可以隨時留言交流。


免責聲明!

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



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