Apachetomcat負載均衡的入門配置詳解_第1頁
Apachetomcat負載均衡的入門配置詳解_第2頁
Apachetomcat負載均衡的入門配置詳解_第3頁
Apachetomcat負載均衡的入門配置詳解_第4頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Apache+tomcat+memcache 負載均衡的入門配置目錄一、準備工作1二、配置 Apache11、打開相關的模塊。12、配置 tomcat 集群。2三、配置tomcat21、配置 server 的關閉。22、配置 Connector23、配置 Engine34、配置 Session 的復制3這份文檔只是一個初步的配置負載均衡的文檔,沒有涉及過多的性能優化的東西。所以也就不多言了,直接切入主題。一、準備工作安裝 JDK 并配置環境變量。這里要求至少1.5 以上版本。安裝 apache2.2。我的安裝目錄為:D:Apache2.2安裝 tomcat6 。為了端口不起沖突,建議直接解壓。

2、我這里只使用了兩臺tomcat 作為集群服務器。其路徑分別為D:apache-tomcat-6.0.20_v1 、D:apache-tomcat-6.0.20_v2二、配置 Apache這里說明一下, 我在網上找到的一些資料都在介紹mod_JK 的方式配置負載均衡。但是從 apache2.X 版本之后其自身已經集成了 mod_jk 可以直接使用 mod_proxy 的方式進行負載均衡的配置,所以下面介紹的也即是這種方式。在 D:Apache2.2conf 目錄下找到 httpd.conf 文件,并進行修改。修改步驟:1、打開相關的模塊。LoadModule proxy_module modul

3、es/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.so Load

4、Module rewrite_module modules/mod_rewrite.so在配置文件里找到上述模塊,將前邊的“#”去掉 .2、配置 tomcat集群。在該配置文件的最后加上:ProxyRequests OffProxyPass / balancer:/cluster/<proxy balancer:/cluster>BalancerMember ajp:/ localhost:8009 loadfactor=1 route= jvm1 BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </p

5、roxy>注意紅色部分, 因為這里我只使用了一臺物理機器作為集群的配置,所以就直接使用了localhost 指向本地的集群服務器, 你也可以使用 。如果這里你使用多臺機器一起配合的話,只需要將 localhost 修改為其他機器的 IP 地址就行。另外需要注意的就是上面配置的端口,為什么要這么配置?將在后邊結合tomcat一起做一個詳細的說明。三、配置 tomcat在 D:apache-tomcat-*conf 找到 server.xml,然后著手修改。1、配置 server的關閉。因為我是在同一臺機器上配置兩臺 tomcat,所以為了使 tomcat 關閉不出現端口被

6、占用的情況,需要修改關閉端口。<Server port=" 8005" shutdown="SHUTDOWN">修改為:<Server port=" XXXX " shutdown="SHUTDOWN">注意,我這里用了兩臺個 tomcat 我將此端口修改為了tomcat ,所以第一個tomcat 我就選擇了默認的端口8005,第二9005。總之,如果你有多臺tomcat 服務器群,都需要將它們的端口修改為互不沖突的端口號。2、配置 Connector這里又兩個地方需要修改,第一個就是tom

7、cat 監聽的 http 端口,另一個就是tomcat 監聽的 AJP 端口:<Connector port=" 8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port=" 8009" protocol="AJP/1.3" redirectPort="8443" />注意,藍色部分是 tomcat 的 http 端

8、口,因為我在同一臺機器上配置了兩個 tomcat,為了使它們的 http 端口不沖突,我將第一個 tomcat 使用默認的端口即 8080,第二個 tomcat 的http端口我修改為了8081。同樣的道理,如果你還有其他的tomcat,記得將它們的http端口修改為互不沖突的端口號即可。另一個需要修改的端口,紅色部分的端口,這里是apache 和tomcat鏈接的關鍵,前臺apache 就是通過AJP 協議與 tomcat 進行通信的,以完成負載均衡的作用。現在回過頭去看看 apache 的 httpd.conf 配置,<proxy balancer:/cluster>Balan

9、cerMember ajp:/ localhost:8009 loadfactor=1 route= jvm1BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </proxy>那么,另一個tomcat 的 AJP 端口你知道要配置成什么了嗎?對了,就是9009。3、配置 Engine<Engine name="Catalina" defaultHost="localhost"> ,這個是原來的配置, 現在將這個配置修改為: <Engine name=&q

10、uot;Catalina" defaultHost="localhost" jvmRoute=" jvm1 "> ,然后另一個 tomcat 修改為 <Engine name="Catalina" defaultHost="localhost" jvmRoute=" jvm2 "> 。現在再回過頭去看看apache 的配置:<proxy balancer:/cluster>BalancerMember ajp:/ localhost:8009 loadfa

11、ctor=1 route= jvm1 BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </proxy>這里再說明一點,loadfactor 相當于一種加權策略,服務器分到的請求就越多。像上面的這種設置就說明兩臺loadfactor 的值越大,對應的tomcat 將平均負載。tomcat4、配置 Session的復制步驟 1: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptio

12、ns="8"><Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/><Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className=

13、"org.apache.catalina.tribes.membership.McastService"address=""port="45564"frequency="500"dropTime="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto"port="4000"

14、autoBind="100"selectorTimeout="5000"maxThreads="6"/><!- timeout="60000"-><Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParal

15、lelSender" /> </Sender><InterceptorclassName="erceptors.TcpFailureDetector"/><InterceptorclassName="erceptors.MessageDispatch15Interceptor"/><InterceptorclassName="org.apache

16、.erceptors.ThroughputInterceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/><Valve className="org.apache.catalina.ha.session.Jvm

17、RouteBinderValve"/><Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListenerclassName="org.apache.cat

18、alina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>步驟 2:在每個 web 項目 web-info 下 web.xml 最后加上 <distributable/> 新建一個項目測試就 OK 了 驚醒測試測試結果jvm1Jvm25、安裝 memcache客戶端1Memcached介紹Me

19、mcached是一個高性能的分布式內存對象緩存系統,用于動態Web 應用以減輕數據庫負載。 它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、 數據庫驅動網站的速度。Memcached基于一個存儲鍵/值對的 hashmap 。其守護進程 ( daemon)是用 C 寫的,但是客戶端可以用任何語言來編寫,并通過memcached協議與守護進程通信。Memcached需要有緩存服務端,采用中實現 memcached服務的插件。2 使用 Memcached目的java編程的話還需要memcached.jar,這就是java研究這個東東主要是為了解決在項目中,由于信息過多,當用戶查詢數

20、據時(目前當天查詢的都是前一天的數據) ,由于數據量過大, 并且大并發情況下數據庫頻繁讀寫造成速度慢的問題。所以就想通過使用 Memcached 解決這一問題。3memcached原理及工作機制Memcache是 的一個項目, 最早是為LiveJournal服務的, 目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力。它可以應對任意多個連接,使用非阻塞的網絡 IO。由于它的工作機制是在內存中開辟一塊空間,然后建立一個 HashTable , Memcached 自管理這些 HashTable 。4準備過程在開發前,要準備有:memcached-1.2.6-win32-b

21、in.zipwindows下服務器memcached-1.2.6-win32-src.zipwindows下服務器源碼(是C 語言哦,親)memcached-1.2.6.tar.gzlinux 下服務器java_memcached-release_2.5.1.jarjava 客戶端 JAR 包5服務器安裝過程首先解壓 memcached-1.2.6-win32-bin.zip 到某一盤下,然后使用命令、或者直接雙擊,運行。相當于就已經安裝好 memcached 服務器了。并且啟動了服務。它的默認端口是:11211( 不建議修改 )打開控制面板管理工具服務:此時可以訪問一下服務器:打開運行cmd

22、 telnet 11211輸入命令stats這里顯示了很多狀態信息,下邊詳細解釋每個狀態項:1.pid: memcached服務進程的進程ID2. uptime: memcached 服務從啟動到當前所經過的時間,單位是秒。3. time: memcached 服務器所在主機當前系統的時間,單位是秒。4.version: memcached 組件的版本。這里是我當前使用的1.2.6 。5.pointer_size :服務器所在主機操作系統的指針大小,一般為32 或 64.6. curr_items :表示當前緩存中存放的所有緩存對象的數量。不包括目前已經從緩存中刪除的對象。

23、7. total_items :表示從 memcached 服務啟動到當前時間, 系統存儲過的所有對象的數量,包括目前已經從緩存中刪除的對象。8. bytes :表示系統存儲緩存對象所使用的存儲空間,單位為字節。9. curr_connections :表示當前系統打開的連接數。10. total_connections :表示從 memcached 服務啟動到當前時間,系統打開過的連接的總數。11. connection_structures :表示從 memcached 服務啟動到當前時間,被服務器分配的連接結構的數量,這個解釋是協議文檔給的,具體什么意思,我目前還沒搞明白。12. cmd

24、_get :累積獲取數據的數量,這里是3 ,因為我測試過 3 次,第一次因為沒有序列化對象,所以獲取數據失敗,是null ,后邊有2 次是我用不同對象測試了2 次。13. cmd_set :累積保存數據的樹立數量,這里是2.雖然我存儲了3 次,但是第一次因為沒有序列化,所以沒有保存到緩存,也就沒有記錄。14. get_hits :表示獲取數據成功的次數。15. get_misses :表示獲取數據失敗的次數。16. evictions :為了給新的數據項目釋放空間,從緩存移除的緩存對象的數目。比如超過緩存大小時根據 LRU 算法移除的對象,以及過期的對象。17. bytes_read :mem

25、cached 服務器從網絡讀取的總的字節數。18. bytes_written :memcached 服務器發送到網絡的總的字節數。19. limit_maxbytes :memcached 服務緩存允許使用的最大字節數。 這里為 67108864 字節,也就是是 64M. 與我們啟動 memcached 服務設置的大小一致。20. threads :被請求的工作線程的總數量。這個解釋是協議文檔給的,具體什么意思,我目前還沒搞明白。6 客戶端開發過程(分為2 種)第 1 種:不使用spring (直接在static里面初始化連接。)1加載 java_memcached-release_2.5.

26、1.jar包2編寫 MemcachedUtil 分布式緩存工具類3 創建需要緩存的對象(必須要序列化對象)對于普通的POJO 而言,如果要進行存儲的話,那么比如讓其實現java.io.Serializable接口,因為 memcached是一個分布式的緩存服務器,多臺服務器間進行數據共享需要將對象序列化的, 所以必須實現該接口,否則會報錯的。 緩存中獲取的對象是存入對象的一個副本,對獲取對象的修改并不能真正的修改緩存中的數據,而應該使用其提供的replace 等方法來進行修改。4 使用緩存(如果在緩存有效期內,則數據就從緩存中查詢,如果不在緩存有效期內,意思就是過期了,則就從數據庫中查詢)5

27、緩存過期時間的設置過期時間有兩種格式:1. 相對時間:多長時間,給出過期的時間長度2. 絕對時間:到期時間,給出過期的最后期限相對時間時,返回的值是:服務器當前時間之后的exptime - process_started秒絕對時間時,返回的值是:服務器當前時間之后的(exptime - 服務器當前時間)-process_started秒。可以看到,如果Client 和 Server 時間不一致,使用絕對時間很容易導致緩存過期。所以使用相對時間是比較安全的做法。服務端的處理時間處理源代碼【memcached.c】如下:#define REALTIME_MAXDELTA60*60*24*30/定義

28、 30 天的秒數static rel_time_t realtime(const time_texptime) if(exptime = 0) return 0;if(exptime > REALTIME_MAXDELTA)/超過 30 天,是絕對時間if(exptime <=process_started)/小于進程啟動日期return(rel_time_t)1;/return(rel_time_t)(exptime - process_started);/返回進程啟動之后的時間差else/不超過 30 天,是相對時間return(rel_time_t)(exptime +cur

29、rent_time);/ exptime + (tvsec-process_started)OK ,結束!第 2 種方法:(使用spring配置,方便之后擴展)1 同樣加載JAR 包 java_memcached-release_2.5.1.jar2 封裝 memcached緩存。建立接口IMemcachedClient實現類 MemcachedClientImpl.java3 在 spring 的核心配置文件applicationContext.xml中配置4 創建需要緩存的對象。5 使用 memcached 的緩存OK ,結束!6 apache+多個tomcat+memcached共享se

30、ssion會話(windows)c)再修改 Tomcat 的 context.xmlhtmlview plaincopyprint?1. <Manager className ="de.javakaffee.web.msm.Memcached BackupSessionManager"2.3. memcachedNodes="n1:localhost:11211"4.5. requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"6.7. sessionBackupAsync =&qu

31、ot;false"8.9. sessionBackupTimeout ="100"10.11.transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"12.13.copyCollectionsForSerialization="false" />需要用到的jar 包:memcached-2.6.jar這個 jar 包測試的時候有問題,需要改成spymemcached-2.8.4.jar

32、包才能正常使用,或者會報下面一下錯誤( d-2.8.4.jar )javolution-.jarmemcached-session-manager-1.5.1.jarmemcached-session-manager-tc7-1.5.1.jarmsm-javolution-serializer-1.5.1.jarmsm-kryo-serializer-1.5.1.jarmsm-xstream-serializer-1.5.1.jar以上 jar 包在 中都可以找到。d) 安裝 memcached服務器,參見3、編寫測試代碼index.jsphtmlview plaincopyprint?1.<% page contentType="text/html; charset=GBK"%>2.<% page import ="java.util.*"%>3.<html><head><title>Cluster Test</ti

溫馨提示

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

評論

0/150

提交評論