Apache整合Tomcat負(fù)載均衡及Session復(fù)制的實現(xiàn)_第1頁
Apache整合Tomcat負(fù)載均衡及Session復(fù)制的實現(xiàn)_第2頁
Apache整合Tomcat負(fù)載均衡及Session復(fù)制的實現(xiàn)_第3頁
Apache整合Tomcat負(fù)載均衡及Session復(fù)制的實現(xiàn)_第4頁
Apache整合Tomcat負(fù)載均衡及Session復(fù)制的實現(xiàn)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Apache整合Tomcat負(fù)載均衡及Session復(fù)制的實現(xiàn)關(guān)鍵字: apache tomcat 負(fù)載均衡 群集 session綁定 集群背景介紹1.1 術(shù)語定義   服務(wù)軟體是b/s或c/s結(jié)構(gòu)的s部分,是為b或c提供服務(wù)的服務(wù)性軟件系統(tǒng)。    服務(wù)硬體指提供計算服務(wù)的硬件、比如pc機、pc服務(wù)器。    服務(wù)實體通指服務(wù)軟體和服務(wù)硬體。    客戶端指接受服務(wù)實體服務(wù)的軟件或硬件。  1.2 兩大關(guān)鍵特性 集群是一組協(xié)同工作的服務(wù)實體,用以提供比單一服務(wù)實體更具擴展性與可用性的服務(wù)平臺。

2、在客戶端看來,一個集群就象是一個服務(wù)實體,但事實上集群由一組服務(wù)實體組成。與單一服務(wù)實體相比較,集群提供了以下兩個關(guān)鍵特性: · 可擴展性集群的性能不限于單一的服務(wù)實體,新的服務(wù)實體可以動態(tài)地加入到集群,從而增強集群的性能。 · 高可用性集群通過服務(wù)實體冗余使客戶端免于輕易遇到out of service的警告。在集群中,同樣的服務(wù)可以由多個服務(wù)實體提供。如果一個服務(wù)實體失敗了,另一個服務(wù)實體會接管失敗的服務(wù)實體。集群提供的從一個出錯的服務(wù)實體恢復(fù)到另一個服務(wù)實體的功能增強了應(yīng)用的可用性。1.3 兩大能力 為了具有可擴展性和高可用性特點,集群的必須具備以下兩大能力

3、: · 負(fù)載均衡負(fù)載均衡能把任務(wù)比較均衡地分布到集群環(huán)境下的計算和網(wǎng)絡(luò)資源。 · 錯誤恢復(fù)由于某種原因,執(zhí)行某個任務(wù)的資源出現(xiàn)故障,另一服務(wù)實體中執(zhí)行同一任務(wù)的資源接著完成任務(wù)。這種由于一個實體中的資源不能工作,另一個實體中的資源透明的繼續(xù)完成任務(wù)的過程叫錯誤恢復(fù)。 負(fù)載均衡和錯誤恢復(fù)都要求各服務(wù)實體中有執(zhí)行同一任務(wù)的資源存在,而且對于同一任務(wù)的各個資源來說,執(zhí)行任務(wù)所需的信息視圖(信息上下文)必須是一樣的。 1.4 兩大技術(shù) 實現(xiàn)集群務(wù)必要有以下兩大技術(shù): · 集群地址集群由多個服務(wù)實體組成,集群客戶端通過訪問集群的集群地址獲取集群內(nèi)部各服務(wù)

4、實體的功能。具有單一集群地址(也叫單一影像)是集群的一個基本特征。維護集群地址的設(shè)置被稱為負(fù)載均衡器。負(fù)載均衡器內(nèi)部負(fù)責(zé)管理各個服務(wù)實體的加入和退出,外部負(fù)責(zé)集群地址向內(nèi)部服務(wù)實體地址的轉(zhuǎn)換。有的負(fù)載均衡器實現(xiàn)真正的負(fù)載均衡算法,有的只支持任務(wù)的轉(zhuǎn)換。只實現(xiàn)任務(wù)轉(zhuǎn)換的負(fù)載均衡器適用于支持ACTIVE-STANDBY的集群環(huán)境,在那里,集群中只有一個服務(wù)實體工作,當(dāng)正在工作的服務(wù)實體發(fā)生故障時,負(fù)載均衡器把后來的任務(wù)轉(zhuǎn)向另外一個服務(wù)實體。 · 內(nèi)部通信為了能協(xié)同工作、實現(xiàn)負(fù)載均衡和錯誤恢復(fù),集群各實體間必須時常通信,比如負(fù)載均衡器對服務(wù)實體心跳測試信息、服務(wù)實體間任務(wù)執(zhí)行上下文信息的通

5、信。 具有同一個集群地址使得客戶端能訪問集群提供的計算服務(wù),一個集群地址下隱藏了各個服務(wù)實體的內(nèi)部地址,使得客戶要求的計算服務(wù)能在各個服務(wù)實體之間分布。內(nèi)部通信是集群能正常運轉(zhuǎn)的基礎(chǔ),它使得集群具有均衡負(fù)載和錯誤恢復(fù)的能力。   集群配置      從上圖可知,由服務(wù)實體1、服務(wù)實體2和負(fù)載均衡器組成了一個集群。服務(wù)實體1和服務(wù)實體2參與對客戶端的服務(wù)支持工作,均衡負(fù)載器為客戶端維護集群的單一影像。集群實體間通過內(nèi)部的通信網(wǎng)交流信息,這種交流機制一般采用組播協(xié)議。負(fù)載均衡器通過內(nèi)部通信網(wǎng)探測各服務(wù)實體的心跳信息,服

6、務(wù)實體間通過內(nèi)部通信網(wǎng)完成任務(wù)資源的傳播??梢钥闯?,配置集群主要由配置服務(wù)實體和配置負(fù)載均衡器兩部分組成。本文使用、配置集群環(huán)境。 2.1 準(zhǔn)備軟件· tomcat是開源服務(wù)器,下載地點 ;(本文使用的apache-tomcat-5.5.20.zip)· apache是開源的www服務(wù)器,下載地點 ;(本文使用的apache_2.2.11-win32-x86-no_ssl.msi)· jk2模塊,jk 是mod_jserv的替代者,它是Tomcat-Apache插件,處理Tomcat和Apache之間的通信,在集群配置中充當(dāng)負(fù)載均衡器的作用。JK2是符合

7、系列的新品,下載地址 。(本文使用的mod_jk-1.2.28-httpd-2.2.3.so)2.2 配置負(fù)載均衡器在apache下配置負(fù)載均衡器分為三步,注意每次修改和時不要忘了重新啟動apache。  · 第一步,安裝和調(diào)試apache 負(fù)載均衡器jk2模塊是apache www 服務(wù)的插件,所以配置負(fù)載均衡器就得先安裝apache。本文下載的是windows版本,執(zhí)行msi并回答一些簡單問題就可完成apache的任務(wù)。值得注意的是,安裝并啟動apache后如果apache對http:/localhost/ 地址沒反應(yīng),你得修改apache安裝路徑下htdocs目錄下的

8、文件,比如把改成。 · 第二步,安裝jk2把下載的 mod_jk-1.2.28-httpd-2.2.3.so 改名為 mod_jk2.so 放到apache的modules目錄下,修改apache的conf目錄下的,在文件最后加入一行,在conf目錄下創(chuàng)建文件,內(nèi)容如下: Conf代碼 1. # Load mod_jk2 module   2. LoadModule jk_module modules/mod_jk2.so   3.   4.   

9、;5. # Where to find perties   6. JkWorkersFile conf/perties   7.   8.   9. # Where to put jk logs   10. JkLogFile logs/mod_jk2.log   11.   12.  

10、0;13. # Set the jk log level debug/error/info   14. JkLogLevel info   15.   16.   17. # Select the log format   18. JkLogStampFormat "%a %b %d %H:%M:%S %Y "

11、;  19.   20.   21. # JkOptions indicate to send SSL KEY SIZE,   22. JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories   23.   24.   25. # JkRequestLogFormat 

12、;set the request format   26. JkRequestLogFormat "%w %V %T"  27.   28. # Send JSPs for context / to worker named loadBalancer   29. JkMount /*.jsp loadBalancer 

13、 # Load mod_jk2 module# Where to put jk logs# Set the jk log level debug/error/infoJkLogLevel info# Select the log formatJkLogStampFormat "%a %b %d %H:%M:%S %Y "# JkOptions indicate to send SSL KEY SIZE,JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories# JkRequestLogForma

14、t set the request formatJkRequestLogFormat "%w %V %T"# Send JSPs for context / to worker named loadBalancerJkMount /*.jsp loadBalancer · 第三步,配置jk2jk2的配置全在一個配置文件中,文件名為,和apache 的放在同一個目錄下。以下是這個文件的內(nèi)容: Properties代碼 1. #   2. # perties   3. #  &

15、#160;4.   5. # list the workers by name   6.   7. worker.list=tomcat1, tomcat2, loadBalancer   8.   9. # -   10. # First tomcat server   11. # -   12. worker.to

16、mcat1.port=8009  13. worker.tomcat1.host=.  14. worker.tomcat1.type=ajp13   15.   16. # Specify the size of the open connection cache.   17. #worker.tomcat1.cachesize   18.   19. #  

17、60;20. # Specifies the load balance factor when used with   21. # a load balancing worker.   22. # Note:   23. # -> lbfactor must be > 0  24. # -> 

18、;Low lbfactor means less work done by the worker.   25. worker.tomcat1.lbfactor=100  26.   27.   28. # -   29. # Second tomcat server   30. # -   31. worker.tomcat2.

19、port=8009  32. worker.tomcat2.host=.  33. worker.tomcat2.type=ajp13   34.   35. # Specify the size of the open connection cache.   36. #worker.tomcat2.cachesize   37.   38. #   39.

20、 # Specifies the load balance factor when used with   40. # a load balancing worker.   41. # Note:   42. # -> lbfactor must be > 0  43. # -> Low&#

21、160;lbfactor means less work done by the worker.   44. worker.tomcat2.lbfactor=100  45.   46.   47. # -   48. # Load Balancer worker   49. # -   50.   51. # 

22、60; 52. # The loadbalancer (type lb) worker performs weighted round-robin   53. # load balancing with sticky sessions.   54. # Note:   55. # -> If a worker dies, 

23、the load balancer will check its state   56. # once in a while. Until then all work is redirected to peer   57. # worker.   58. worker.loadBalancer.type=lb   59. wor

24、ker.loadBalancer.balanced_workers=tomcat1, tomcat2   60.   61. #   62. # END perties   63. #  # list the workers by nameworker.list=tomcat1, tomcat2, loadBalancer# -# First tomcat server# -worker.tomcat1.port=8009worker.tomc

25、at1.type=ajp13# Specify the size of the open connection cache.# Specifies the load balance factor when used with# a load balancing worker.# Note:# -> lbfactor must be > 0# -> Low lbfactor means less work done by the worker.worker.tomcat1.lbfactor=100# -# Second tomcat server# -worker.tomcat

26、2.port=8009worker.tomcat2.type=ajp13# Specify the size of the open connection cache.# Specifies the load balance factor when used with# a load balancing worker.# Note:# -> lbfactor must be > 0# -> Low lbfactor means less work done by the worker.worker.tomcat2.lbfactor=100# -# Load Balancer

27、worker# -# The loadbalancer (type lb) worker performs weighted round-robin# load balancing with sticky sessions.# Note:# -> If a worker dies, the load balancer will check its state# once in a while. Until then all work is redirected to peer# worker.worker.loadBalancer.type=lbworker.loadBalancer.b

28、alanced_workers=tomcat1, tomcat2# 對于jk2模塊的負(fù)載均衡配置可參見相關(guān)站點,值得提的是jk2的負(fù)載均衡還支持權(quán)重分配等優(yōu)秀功能。 測試:在跑tomcat1實例的機器的 webapps/testGroup 測試項目目錄生成如下內(nèi)容的文件:(設(shè)置session)Jsp代碼 1. <%    2.    System.out.println("=");   3.    System.out.println(session

29、.getAttribute("test");   4.    session.setAttribute("test","Session");   5. %>   6.   7. <html>   8.   <body bgcolor="red">   9.     &l

30、t;center>   10.     <h1>Tomcat 1</h1>   11.   </body>   12. </html>  <% System.out.println("="); System.out.println(session.getAttribute("test"); session.setAttribute("te

31、st","Session");%><html> <body bgcolor="red"> <center> <h1>Tomcat 1</h1> </body></html> 同理,在跑tomcat2實例的機器的 webapps/testGroup 測試項目目錄生成如下內(nèi)容的文件:Jsp代碼 1. <%    2.    System.out.println("="

32、;);   3.    System.out.println(session.getAttribute("test");   4. %>   5.   6. <html>   7.   <body bgcolor="blue">   8.     <center>   9. &

33、#160;   <h1>Tomcat 2</h1>   10.   </body>   11. </html>  <% System.out.println("="); System.out.println(session.getAttribute("test");%><html> <body bgcolor="blue"> <

34、center> <h1>Tomcat 2</h1> </body></html> 啟動Tomcat1, Tomcat2 和Apache服務(wù)Apache服務(wù)器Tomcat1服務(wù)器Tomcat2服務(wù)器首先驗證Apache服務(wù)器的靜態(tài)頁面是否正常,訪問:05/(若局域網(wǎng)內(nèi)不能訪問請檢查防火墻設(shè)置)驗證tomcat和apache配置提供負(fù)載均衡,用不同的終端訪問:05/testGroup/index.jsp如果你看到紅色的頁面,表示為tomcat1 服務(wù)器返回的,如果你看

35、到蘭色的頁面,表示為tomcat2 服務(wù)器返回的。 2.3 配置tomcat(綁定session) 同屬于一個集群下的兩個服務(wù)實體,要求功能的同一性,所以我們可先安裝和配置第一個tomcat,接著拷貝形成第二個tomcat,最后配置第二個tomcat。修改tomcat1, tomcat2的 修改 <Engine /> 標(biāo)簽在跑第一個tomcat實例的機器上,在大約第120行(去掉注釋), 將<Engine name="Standalone" defaultHost="localhost" debug=&

36、quot;0">替換為:<Engine jvmRoute="tomcat1" name="Standalone" defaultHost="05" debug="0" />對跑第二個tomcat實例的機器上,替換為 jvmRoute="tomcat2".Xml代碼 1. <!- You should set jvmRoute to support load-balanci

37、ng via AJP ie :   2. <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">  3. ->    4. <Engine jvmRoute="tomcat2" name="Standalone" default

38、Host="05" debug="0" />  5.       <!- You should set jvmRoute to support load-balancing via AJP ie :<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">-> <En

39、gine jvmRoute="tomcat2" name="Standalone" defaultHost="05" debug="0" />  有的文檔寫得是在配置中加入一行<Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0"></Engine>,其實是不對的,這樣負(fù)載均

40、衡是沒有問題的,但是不能做session綁定,也就是說同一用戶會在兩臺服務(wù)器上跳來跳去。這是由于jvmRoute不正確引起的,因為如果只是加入一行的話,是沒有什么作用的,Engine仍然是原來的 Engine,而原來的Engine中jvmRoute是不正確的,所以一定要替換。而且這個jvmRoute一定要跟 perties 中的名稱完全匹配,否則也不能實現(xiàn)session綁定.  修改 <Cluster /> 標(biāo)簽將<Cluster />標(biāo)簽注釋去掉,代碼如下:Xml代碼 1. <Cluster classNa

41、me="org.apache.catalina.cluster.tcp.SimpleTcpCluster"  2.                  managerClassName="org.apache.catalina.cluster.session.DeltaManager"  3.     

42、0;            expireSessionsOnShutdown="false"  4.                  useDirtyFlag="true"  5.     

43、;             notifyListenersOnReplication="true">  6.   7.             <Membership    8.      

44、0;          className="org.apache.catalina.cluster.mcast.McastService"  9.                 mcastAddr=""  10.   

45、              mcastPort="45564"  11.                 mcastFrequency="500"  12.      &

46、#160;          mcastDropTime="3000"/>  13.   14.             <Receiver    15.           &

47、#160;     className="org.apache.catalina.cluster.tcp.ReplicationListener"  16.                 tcpListenAddress="auto"  17.      &

48、#160;          tcpListenPort="4001"  18.                 tcpSelectorTimeout="100"  19.        &

49、#160;        tcpThreadCount="6"/>  20.   21.             <Sender  22.               

50、  className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"  23.                 replicationMode="pooled"  24.         &#

51、160;       ackTimeout="15000"  25.                 waitForAck="true"/>  26.   27.         &#

52、160;   <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"  28.                    filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.

53、*.txt;"/>  29.                       30.             <Deployer className="org.apache.catalina.cluster.de

54、ploy.FarmWarDeployer"  31.                       tempDir="/tmp/war-temp/"  32.             

55、0;         deployDir="/tmp/war-deploy/"  33.                       watchDir="/tmp/war-listen/"  34.  

56、;                     watchEnabled="false"/>  35.                     &#

57、160;    36.             <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>  37.         </Cluster>  

58、;<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true" notifyListenersOnReplication="true"> <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論