



版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Apache+tomcat+memcache 負(fù)載均衡的入門(mén)配置目錄一、準(zhǔn)備工作1二、配置 Apache11、打開(kāi)相關(guān)的模塊。12、配置 tomcat 集群。2三、配置tomcat21、配置 server 的關(guān)閉。22、配置 Connector23、配置 Engine34、配置 Session 的復(fù)制3這份文檔只是一個(gè)初步的配置負(fù)載均衡的文檔,沒(méi)有涉及過(guò)多的性能優(yōu)化的東西。所以也就不多言了,直接切入主題。一、準(zhǔn)備工作安裝 JDK 并配置環(huán)境變量。這里要求至少1.5 以上版本。安裝 apache2.2。我的安裝目錄為:D:Apache2.2安裝 tomcat6 。為了端口不起沖突,建議直接解壓。
2、我這里只使用了兩臺(tái)tomcat 作為集群服務(wù)器。其路徑分別為D:apache-tomcat-6.0.20_v1 、D:apache-tomcat-6.0.20_v2二、配置 Apache這里說(shuō)明一下, 我在網(wǎng)上找到的一些資料都在介紹mod_JK 的方式配置負(fù)載均衡。但是從 apache2.X 版本之后其自身已經(jīng)集成了 mod_jk 可以直接使用 mod_proxy 的方式進(jìn)行負(fù)載均衡的配置,所以下面介紹的也即是這種方式。在 D:Apache2.2conf 目錄下找到 httpd.conf 文件,并進(jìn)行修改。修改步驟:1、打開(kāi)相關(guān)的模塊。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>注意紅色部分, 因?yàn)檫@里我只使用了一臺(tái)物理機(jī)器作為集群的配置,所以就直接使用了localhost 指向本地的集群服務(wù)器, 你也可以使用 。如果這里你使用多臺(tái)機(jī)器一起配合的話,只需要將 localhost 修改為其他機(jī)器的 IP 地址就行。另外需要注意的就是上面配置的端口,為什么要這么配置?將在后邊結(jié)合tomcat一起做一個(gè)詳細(xì)的說(shuō)明。三、配置 tomcat在 D:apache-tomcat-*conf 找到 server.xml,然后著手修改。1、配置 server的關(guān)閉。因?yàn)槲沂窃谕慌_(tái)機(jī)器上配置兩臺(tái) tomcat,所以為了使 tomcat 關(guān)閉不出現(xiàn)端口被
6、占用的情況,需要修改關(guān)閉端口。<Server port=" 8005" shutdown="SHUTDOWN">修改為:<Server port=" XXXX " shutdown="SHUTDOWN">注意,我這里用了兩臺(tái)個(gè) tomcat 我將此端口修改為了tomcat ,所以第一個(gè)tomcat 我就選擇了默認(rèn)的端口8005,第二9005??傊绻阌卸嗯_(tái)tomcat 服務(wù)器群,都需要將它們的端口修改為互不沖突的端口號(hào)。2、配置 Connector這里又兩個(gè)地方需要修改,第一個(gè)就是tom
7、cat 監(jiān)聽(tīng)的 http 端口,另一個(gè)就是tomcat 監(jiān)聽(tīng)的 AJP 端口:<Connector port=" 8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port=" 8009" protocol="AJP/1.3" redirectPort="8443" />注意,藍(lán)色部分是 tomcat 的 http 端
8、口,因?yàn)槲以谕慌_(tái)機(jī)器上配置了兩個(gè) tomcat,為了使它們的 http 端口不沖突,我將第一個(gè) tomcat 使用默認(rèn)的端口即 8080,第二個(gè) tomcat 的http端口我修改為了8081。同樣的道理,如果你還有其他的tomcat,記得將它們的http端口修改為互不沖突的端口號(hào)即可。另一個(gè)需要修改的端口,紅色部分的端口,這里是apache 和tomcat鏈接的關(guān)鍵,前臺(tái)apache 就是通過(guò)AJP 協(xié)議與 tomcat 進(jìn)行通信的,以完成負(fù)載均衡的作用?,F(xiàn)在回過(guò)頭去看看 apache 的 httpd.conf 配置,<proxy balancer:/cluster>Balan
9、cerMember ajp:/ localhost:8009 loadfactor=1 route= jvm1BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </proxy>那么,另一個(gè)tomcat 的 AJP 端口你知道要配置成什么了嗎?對(duì)了,就是9009。3、配置 Engine<Engine name="Catalina" defaultHost="localhost"> ,這個(gè)是原來(lái)的配置, 現(xiàn)在將這個(gè)配置修改為: <Engine name=&q
10、uot;Catalina" defaultHost="localhost" jvmRoute=" jvm1 "> ,然后另一個(gè) tomcat 修改為 <Engine name="Catalina" defaultHost="localhost" jvmRoute=" jvm2 "> ?,F(xiàn)在再回過(guò)頭去看看apache 的配置:<proxy balancer:/cluster>BalancerMember ajp:/ localhost:8009 loadfa
11、ctor=1 route= jvm1 BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </proxy>這里再說(shuō)明一點(diǎn),loadfactor 相當(dāng)于一種加權(quán)策略,服務(wù)器分到的請(qǐng)求就越多。像上面的這種設(shè)置就說(shuō)明兩臺(tái)loadfactor 的值越大,對(duì)應(yīng)的tomcat 將平均負(fù)載。tomcat4、配置 Session的復(fù)制步驟 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:在每個(gè) web 項(xiàng)目 web-info 下 web.xml 最后加上 <distributable/> 新建一個(gè)項(xiàng)目測(cè)試就 OK 了 驚醒測(cè)試測(cè)試結(jié)果jvm1Jvm25、安裝 memcache客戶(hù)端1Memcached介紹Me
19、mcached是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),用于動(dòng)態(tài)Web 應(yīng)用以減輕數(shù)據(jù)庫(kù)負(fù)載。 它通過(guò)在內(nèi)存中緩存數(shù)據(jù)和對(duì)象來(lái)減少讀取數(shù)據(jù)庫(kù)的次數(shù),從而提供動(dòng)態(tài)、 數(shù)據(jù)庫(kù)驅(qū)動(dòng)網(wǎng)站的速度。Memcached基于一個(gè)存儲(chǔ)鍵/值對(duì)的 hashmap 。其守護(hù)進(jìn)程 ( daemon)是用 C 寫(xiě)的,但是客戶(hù)端可以用任何語(yǔ)言來(lái)編寫(xiě),并通過(guò)memcached協(xié)議與守護(hù)進(jìn)程通信。Memcached需要有緩存服務(wù)端,采用中實(shí)現(xiàn) memcached服務(wù)的插件。2 使用 Memcached目的java編程的話還需要memcached.jar,這就是java研究這個(gè)東東主要是為了解決在項(xiàng)目中,由于信息過(guò)多,當(dāng)用戶(hù)查詢(xún)數(shù)
20、據(jù)時(shí)(目前當(dāng)天查詢(xún)的都是前一天的數(shù)據(jù)) ,由于數(shù)據(jù)量過(guò)大, 并且大并發(fā)情況下數(shù)據(jù)庫(kù)頻繁讀寫(xiě)造成速度慢的問(wèn)題。所以就想通過(guò)使用 Memcached 解決這一問(wèn)題。3memcached原理及工作機(jī)制Memcache是 的一個(gè)項(xiàng)目, 最早是為L(zhǎng)iveJournal服務(wù)的, 目前全世界不少人使用這個(gè)緩存項(xiàng)目來(lái)構(gòu)建自己大負(fù)載的網(wǎng)站,來(lái)分擔(dān)數(shù)據(jù)庫(kù)的壓力。它可以應(yīng)對(duì)任意多個(gè)連接,使用非阻塞的網(wǎng)絡(luò) IO。由于它的工作機(jī)制是在內(nèi)存中開(kāi)辟一塊空間,然后建立一個(gè) HashTable , Memcached 自管理這些 HashTable 。4準(zhǔn)備過(guò)程在開(kāi)發(fā)前,要準(zhǔn)備有:memcached-1.2.6-win32-b
21、in.zipwindows下服務(wù)器memcached-1.2.6-win32-src.zipwindows下服務(wù)器源碼(是C 語(yǔ)言哦,親)memcached-1.2.6.tar.gzlinux 下服務(wù)器java_memcached-release_2.5.1.jarjava 客戶(hù)端 JAR 包5服務(wù)器安裝過(guò)程首先解壓 memcached-1.2.6-win32-bin.zip 到某一盤(pán)下,然后使用命令、或者直接雙擊,運(yùn)行。相當(dāng)于就已經(jīng)安裝好 memcached 服務(wù)器了。并且啟動(dòng)了服務(wù)。它的默認(rèn)端口是:11211( 不建議修改 )打開(kāi)控制面板管理工具服務(wù):此時(shí)可以訪問(wèn)一下服務(wù)器:打開(kāi)運(yùn)行cmd
22、 telnet 11211輸入命令stats這里顯示了很多狀態(tài)信息,下邊詳細(xì)解釋每個(gè)狀態(tài)項(xiàng):1.pid: memcached服務(wù)進(jìn)程的進(jìn)程ID2. uptime: memcached 服務(wù)從啟動(dòng)到當(dāng)前所經(jīng)過(guò)的時(shí)間,單位是秒。3. time: memcached 服務(wù)器所在主機(jī)當(dāng)前系統(tǒng)的時(shí)間,單位是秒。4.version: memcached 組件的版本。這里是我當(dāng)前使用的1.2.6 。5.pointer_size :服務(wù)器所在主機(jī)操作系統(tǒng)的指針大小,一般為32 或 64.6. curr_items :表示當(dāng)前緩存中存放的所有緩存對(duì)象的數(shù)量。不包括目前已經(jīng)從緩存中刪除的對(duì)象。
23、7. total_items :表示從 memcached 服務(wù)啟動(dòng)到當(dāng)前時(shí)間, 系統(tǒng)存儲(chǔ)過(guò)的所有對(duì)象的數(shù)量,包括目前已經(jīng)從緩存中刪除的對(duì)象。8. bytes :表示系統(tǒng)存儲(chǔ)緩存對(duì)象所使用的存儲(chǔ)空間,單位為字節(jié)。9. curr_connections :表示當(dāng)前系統(tǒng)打開(kāi)的連接數(shù)。10. total_connections :表示從 memcached 服務(wù)啟動(dòng)到當(dāng)前時(shí)間,系統(tǒng)打開(kāi)過(guò)的連接的總數(shù)。11. connection_structures :表示從 memcached 服務(wù)啟動(dòng)到當(dāng)前時(shí)間,被服務(wù)器分配的連接結(jié)構(gòu)的數(shù)量,這個(gè)解釋是協(xié)議文檔給的,具體什么意思,我目前還沒(méi)搞明白。12. cmd
24、_get :累積獲取數(shù)據(jù)的數(shù)量,這里是3 ,因?yàn)槲覝y(cè)試過(guò) 3 次,第一次因?yàn)闆](méi)有序列化對(duì)象,所以獲取數(shù)據(jù)失敗,是null ,后邊有2 次是我用不同對(duì)象測(cè)試了2 次。13. cmd_set :累積保存數(shù)據(jù)的樹(shù)立數(shù)量,這里是2.雖然我存儲(chǔ)了3 次,但是第一次因?yàn)闆](méi)有序列化,所以沒(méi)有保存到緩存,也就沒(méi)有記錄。14. get_hits :表示獲取數(shù)據(jù)成功的次數(shù)。15. get_misses :表示獲取數(shù)據(jù)失敗的次數(shù)。16. evictions :為了給新的數(shù)據(jù)項(xiàng)目釋放空間,從緩存移除的緩存對(duì)象的數(shù)目。比如超過(guò)緩存大小時(shí)根據(jù) LRU 算法移除的對(duì)象,以及過(guò)期的對(duì)象。17. bytes_read :mem
25、cached 服務(wù)器從網(wǎng)絡(luò)讀取的總的字節(jié)數(shù)。18. bytes_written :memcached 服務(wù)器發(fā)送到網(wǎng)絡(luò)的總的字節(jié)數(shù)。19. limit_maxbytes :memcached 服務(wù)緩存允許使用的最大字節(jié)數(shù)。 這里為 67108864 字節(jié),也就是是 64M. 與我們啟動(dòng) memcached 服務(wù)設(shè)置的大小一致。20. threads :被請(qǐng)求的工作線程的總數(shù)量。這個(gè)解釋是協(xié)議文檔給的,具體什么意思,我目前還沒(méi)搞明白。6 客戶(hù)端開(kāi)發(fā)過(guò)程(分為2 種)第 1 種:不使用spring (直接在static里面初始化連接。)1加載 java_memcached-release_2.5.
26、1.jar包2編寫(xiě) MemcachedUtil 分布式緩存工具類(lèi)3 創(chuàng)建需要緩存的對(duì)象(必須要序列化對(duì)象)對(duì)于普通的POJO 而言,如果要進(jìn)行存儲(chǔ)的話,那么比如讓其實(shí)現(xiàn)java.io.Serializable接口,因?yàn)?memcached是一個(gè)分布式的緩存服務(wù)器,多臺(tái)服務(wù)器間進(jìn)行數(shù)據(jù)共享需要將對(duì)象序列化的, 所以必須實(shí)現(xiàn)該接口,否則會(huì)報(bào)錯(cuò)的。 緩存中獲取的對(duì)象是存入對(duì)象的一個(gè)副本,對(duì)獲取對(duì)象的修改并不能真正的修改緩存中的數(shù)據(jù),而應(yīng)該使用其提供的replace 等方法來(lái)進(jìn)行修改。4 使用緩存(如果在緩存有效期內(nèi),則數(shù)據(jù)就從緩存中查詢(xún),如果不在緩存有效期內(nèi),意思就是過(guò)期了,則就從數(shù)據(jù)庫(kù)中查詢(xún))5
27、緩存過(guò)期時(shí)間的設(shè)置過(guò)期時(shí)間有兩種格式:1. 相對(duì)時(shí)間:多長(zhǎng)時(shí)間,給出過(guò)期的時(shí)間長(zhǎng)度2. 絕對(duì)時(shí)間:到期時(shí)間,給出過(guò)期的最后期限相對(duì)時(shí)間時(shí),返回的值是:服務(wù)器當(dāng)前時(shí)間之后的exptime - process_started秒絕對(duì)時(shí)間時(shí),返回的值是:服務(wù)器當(dāng)前時(shí)間之后的(exptime - 服務(wù)器當(dāng)前時(shí)間)-process_started秒??梢钥吹?,如果Client 和 Server 時(shí)間不一致,使用絕對(duì)時(shí)間很容易導(dǎo)致緩存過(guò)期。所以使用相對(duì)時(shí)間是比較安全的做法。服務(wù)端的處理時(shí)間處理源代碼【memcached.c】如下:#define REALTIME_MAXDELTA60*60*24*30/定義
28、 30 天的秒數(shù)static rel_time_t realtime(const time_texptime) if(exptime = 0) return 0;if(exptime > REALTIME_MAXDELTA)/超過(guò) 30 天,是絕對(duì)時(shí)間if(exptime <=process_started)/小于進(jìn)程啟動(dòng)日期return(rel_time_t)1;/return(rel_time_t)(exptime - process_started);/返回進(jìn)程啟動(dòng)之后的時(shí)間差else/不超過(guò) 30 天,是相對(duì)時(shí)間return(rel_time_t)(exptime +cur
29、rent_time);/ exptime + (tvsec-process_started)OK ,結(jié)束!第 2 種方法:(使用spring配置,方便之后擴(kuò)展)1 同樣加載JAR 包 java_memcached-release_2.5.1.jar2 封裝 memcached緩存。建立接口IMemcachedClient實(shí)現(xiàn)類(lèi) MemcachedClientImpl.java3 在 spring 的核心配置文件applicationContext.xml中配置4 創(chuàng)建需要緩存的對(duì)象。5 使用 memcached 的緩存OK ,結(jié)束!6 apache+多個(gè)tomcat+memcached共享se
30、ssion會(huì)話(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這個(gè) jar 包測(cè)試的時(shí)候有問(wèn)題,需要改成spymemcached-2.8.4.jar
32、包才能正常使用,或者會(huì)報(bào)下面一下錯(cuò)誤( 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服務(wù)器,參見(jiàn)3、編寫(xiě)測(cè)試代碼index.jsphtmlview plaincopyprint?1.<% page contentType="text/html; charset=GBK"%>2.<% page import ="java.util.*"%>3.<html><head><title>Cluster Test</ti
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程施工合同正規(guī)版本
- 交通事故賠償協(xié)商合同范本
- 幼兒園入園托管合同書(shū)
- 重慶新版服務(wù)合同標(biāo)準(zhǔn)范本
- 11爸爸媽媽在我心中 第1課時(shí)(教學(xué)設(shè)計(jì))-部編版道德與法治三年級(jí)上冊(cè)
- Fantastic animals繪本融合(教學(xué)設(shè)計(jì))-2023-2024學(xué)年外研版(一起)英語(yǔ)六年級(jí)下冊(cè)
- 勞動(dòng)合同解除合同
- 20《蜘蛛開(kāi)店》教學(xué)設(shè)計(jì)-2024-2025學(xué)年語(yǔ)文二年級(jí)下冊(cè)統(tǒng)編版
- 運(yùn)輸代理合同范文
- 戒煙保證金合同協(xié)議
- 2025年南通科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 人工智能與機(jī)器學(xué)習(xí)在風(fēng)險(xiǎn)管理中的應(yīng)用-深度研究
- 河南省洛陽(yáng)市伊川縣2024-2025學(xué)年上學(xué)期期末八年級(jí)生物試題
- 2025年?yáng)|營(yíng)科技職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 福建省廈門(mén)市2024-2025學(xué)年八年級(jí)上學(xué)期1月期末英語(yǔ)試題(含筆試答案無(wú)聽(tīng)力答案、原文及音頻)
- 全脊柱x線攝影技術(shù)
- 真需求-打開(kāi)商業(yè)世界的萬(wàn)能鑰匙
- 《礦山隱蔽致災(zāi)因素普查規(guī)范》解讀培訓(xùn)
- 第1課 立足時(shí)代 志存高遠(yuǎn) (課件+視頻)- 【中職專(zhuān)用】高一思想政治《心理健康與職業(yè)生涯》(高教版2023·基礎(chǔ)模塊)
- 房產(chǎn)1%份額買(mǎi)賣(mài)合同范本
- 皮帶機(jī)提升機(jī)鏈運(yùn)機(jī)功率計(jì)算
評(píng)論
0/150
提交評(píng)論