版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 雙管控安全生產(chǎn)管理制度
- 2025 小學(xué)四年級科學(xué)上冊小臺燈的功能測試課件
- 水溶肥工程生產(chǎn)制度及流程
- 初中英語《同位語從句》專項練習(xí)與答案 (100 題)
- 生豬合作社生產(chǎn)管理制度
- 煤氣站文明生產(chǎn)管理制度
- 安全生產(chǎn)監(jiān)控檢查制度
- 煤礦企業(yè)清潔生產(chǎn)制度
- 2025年機械設(shè)備維護與保養(yǎng)手冊
- 2026年計算機軟件機器人測試高級工程師考試題集
- 50萬噸年脫硫石膏及20萬噸年廢硫磺綜合利用項目可行性研究報告寫作模板-申批備案
- 《床上擦浴技術(shù)》評分標(biāo)準(zhǔn)
- 設(shè)備安裝可行性方案
- 高中化學(xué)人教版(2019)選擇性必修二知識點總結(jié)
- 消化系統(tǒng)常見癥狀與體征課件整理-002
- 流程與TOC改善案例
- 【當(dāng)代中國婚禮空間設(shè)計研究4200字(論文)】
- GB/T 20322-2023石油及天然氣工業(yè)往復(fù)壓縮機
- 中國重汽車輛識別代號(VIN)編制規(guī)則
- 通風(fēng)與空調(diào)監(jiān)理實施細(xì)則abc
- JJF 1614-2017抗生素效價測定儀校準(zhǔn)規(guī)范
評論
0/150
提交評論