丨cluster組件tomcat的集群通信原理_第1頁
丨cluster組件tomcat的集群通信原理_第2頁
丨cluster組件tomcat的集群通信原理_第3頁
丨cluster組件tomcat的集群通信原理_第4頁
丨cluster組件tomcat的集群通信原理_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

解下Tomcat要實現(xiàn)集群通信,首先要知道集群中都有哪些成員。Tomat是通過組播(Mtiast)來實現(xiàn)的。那什么是組播呢?為了理解組播,我先來說說什么是“單播”。網(wǎng)絡(luò)節(jié)點之間的通信就好像是人們之間的一樣,一個人對另外一個人說話,此時信息的接收和傳遞只在兩個節(jié)點之間進(jìn)行,比如你在收發(fā)電子郵件、瀏覽網(wǎng)頁時,使用的就是單播,也就是我們熟悉的“點對點通信”。Tomcat節(jié)點在啟動時和運行時都會周期性(默認(rèn)500毫秒)發(fā)送組播心跳包,同一個集群內(nèi)的節(jié)點都在相同的組播地址和端口這些信息;在一定的時間內(nèi)(默認(rèn)3秒)不發(fā)送組播報文的節(jié)點就會被認(rèn)為已經(jīng)了,會從集群中刪去。因此通過組播,集群中每個成有了集群成員的列表,集群中的節(jié)點就能通過TCP連接向其他節(jié)點傳輸Session數(shù)據(jù)。Tomcat通過SimpleTcpCluster類來進(jìn)行會話(In-MemoryReplication)。要開啟Tomcat1<!-SimpleTcpCluster是用來Session的組件。Session有同步和異步兩種方式同步模式下,向瀏覽器的發(fā)送響應(yīng)數(shù)據(jù)前,需要先將Session異步模式下,無需等待Session同步異步模式由channelSendOptions參數(shù)控制,默認(rèn)值是8,為異步模式;4在異步模式下,可以通過加上"拷貝確認(rèn)"(Acknowledge)channelSendOptions設(shè)為9--<Cluster <!-Manager決定如何管理集群的SessionTomcat提供了兩種Manager:BackupManager和DeltaManagerBackupManager-集群下的某一節(jié)點的Session,將到一個備份節(jié)點DeltaManager-集群下某一節(jié)點的Session,將到所有其他節(jié)點DeltaManager是Tomcat默認(rèn)的集群ManagerexpireSessionsOnShutdown-設(shè)置為true將導(dǎo)致集群下的所有SessionnotifyListenersOnReplication-集群下節(jié)點間的Session刪除操作,是否通知sessionmaxInactiveInterval-集群下Session的有效時間(單位:s)maxInactiveInterval內(nèi)未活動的Session,將被Tomcat默認(rèn)值為 --<Manager <!-Channel是TomcatChannel包括5個組件:Membership、Receiver、SenderTransport、 -- <Channel <!-Membership集群的可用節(jié)點列表。它可以檢查到新增的節(jié)點className-指定Membershipfrequency-發(fā)送心跳(向組播地址發(fā)送UDP數(shù)據(jù)包)的時間間隔(單位:ms)dropTime-Membership在dropTime(單位:ms)則將該節(jié)點從可用節(jié)點列表刪除。默認(rèn)值為3000 -- <!- Receiver className-指定ReceiverautoBind-端口的變化區(qū)間,如果port為4000,autoBind為 將在4000-4099間取一個端口進(jìn)行selectorTimeout-NioReceiver內(nèi)Selector --<Receiver <!-Sender用于向其他節(jié)點發(fā)送數(shù)據(jù),Sender內(nèi)嵌了TransportTransport --<Sender<!-Transport分為兩種:bio.PooledMultiSender(阻塞式和nio.PooledParallelSender(非阻塞式是從tcp --<Transport <!-Interceptor:Cluster的TcpFailureDetector-TcpFailureDetector可以到某個節(jié)點關(guān)的信息,并嘗試通過TCP --<Interceptor <!-MessageDispatchInterceptor-查看Cluster方式是否設(shè)置為Channel.SEND_OPTIONS_ASYNCHRONOUSMessageDispatchInterceptor然后將排好隊的消息轉(zhuǎn)給Sender --<Interceptor <!-Valve:Tomcat的器ReplicationValve-在處理請求前后打日志;過濾不涉及Session--<Valve<Valve <!-Deployer用于集群的farm功能,應(yīng)用中文件的更新,以保證集群中所有節(jié) --<DeployerdeployDir="/tmp/war- <!-ClusterListener:器,Cluster組件接收的消使用DeltaManager時,Cluster接收的信息通過傳遞給DeltaManager,從而更新自己的Session--<ClusterListener139從上面的的參數(shù)列表可以看到,默認(rèn)情況下Session管理組件DeltaManager會在節(jié)點之間拷貝Session,DeltaManager采用的一種all-to-all的工作方式,即集群中的節(jié)點會把Session數(shù)據(jù)向所有其他節(jié)點拷貝,而不管其他節(jié)點是否部署了當(dāng)前應(yīng)用。當(dāng)集群節(jié)點數(shù)比較少時,比如少于4個,這種all-to-all較多時,數(shù)據(jù)拷貝的開銷成指數(shù)級增長,這種情況下可以考慮BackupManager,BackupManager只向一個備份節(jié)點拷貝數(shù)據(jù)。TomcatTomcat薦了一套配置,使用了比DeltaManager更高效的BackupManager,并且通過Receiver點間高效地拷貝數(shù)據(jù),所有Tomcat節(jié)點最好采用相同的配置,具體配置如下:<Cluster3<Manager8<Channel<Membership <Receiver<Sender<Transport<Interceptor<Interceptor<Interceptor <Valve <DeployerdeployDir="/tmp/war-watchDir="/tmp/war-<ClusterListenerTomcat的官網(wǎng)給出了一個例子,來說明Tomcat集群模式下是如何工作的,以及Tomcat集群是如何實現(xiàn)高可用的。比如集群由TomcatA和TomcatB兩個Tomcat實例組成,TomcatATomcatA啟動過程中,當(dāng)Host對象被創(chuàng)建時,一個Cluster組件(默認(rèn)是SimpleTcpCluster)Hostweb.xml中設(shè)置了Distributable,TomcatDeltaManager。SimpleTcpCluster啟動Membership服務(wù)和Replication服務(wù)。TomcatB啟動(在TomcatA首先TomcatB會執(zhí)行和TomcatA一樣的操作,然后SimpleTcpCluster會建立一個由TomcatA和TomcatB組成的Membership。接著TomcatB向集群中的TomcatA請求Session數(shù)據(jù),如果TomcatA沒有響應(yīng)TomcatB的拷貝請求,TomcatB會在60秒后timeout。在Session數(shù)據(jù)拷貝完成之前TomcatB不會接收瀏覽器的請求。TomcatA接收HTTPSessionTomcatA響應(yīng)客戶請求,在把結(jié)果發(fā)送回客戶端之前,ReplicationValve會當(dāng)前請(如果Filter中配置了不需的請求類型,這一步就不會進(jìn)行,默認(rèn)配置下所有請求),如果發(fā)現(xiàn)當(dāng)前請求更新了Session,就調(diào)用Replication服務(wù)建立TCP連接將Session拷貝到Membership列表中的其他節(jié)點即TomcatB。在拷貝時,所有保存在當(dāng)前Session中的可序列化的對象都會被拷貝,而不僅僅是發(fā)生更新的部分。TomcatA當(dāng)TomcatA時,TomcatB會知TomcatA已從集群中退出,然后TomcatBTomcatAMembershipTomcatBSession時不再往TomcatA拷貝,同時負(fù)載均衡器會把后續(xù)的HTTP請求全部轉(zhuǎn)發(fā)給TomcatB。在此過程中所有的Session數(shù)據(jù)不會丟失。TomcatB接收TomcatATomcatBTomcatATomcatBTomcatA的所有Session數(shù)據(jù)。TomcatATomcatA1、2TomcatBSessionTomcatASession1Tomcat繼續(xù)接收發(fā)往TomcatA的請求,Session1設(shè)置為失效。請注意這里的失效并非因為TomcatA(比如用戶登出)而引起的Session失效。這時TomcatA向TomcatB發(fā)送一個Session1Expired的消息,TomcatB收到消息后也會把Session1設(shè)置為失效。TomcatBSession同理這個新的Session也會被拷貝到TomcatATomcatA上的Session2因超時原因引起的Session失效TomcatA無需通知TomcatB,TomcatB同樣知道Session2已經(jīng)超時。因此對于Tomcat集群有一點非常重要,所有節(jié)點的操作系統(tǒng)時間必須一致。不然會出現(xiàn)某個節(jié)點Session已過期而在另一節(jié)點此Session仍處于活動狀態(tài)的現(xiàn)今天我談了Tomcat的集群工作原理和配置方式,還通過官網(wǎng)上的一個例子說明了TomcatTomcatSession:DeltaManager和BackupManager。當(dāng)集群點比較少時,可以采用DeltaManager,因為Session數(shù)據(jù)在集群中各個節(jié)點當(dāng)集群點數(shù)比較多時,可以采用BackupManager,這是因為一個節(jié)點的Session只會拷貝到另一個節(jié)點,數(shù)據(jù)拷貝的開銷比較少,同時只要這兩個節(jié)點不同時,Session在Tomcat推薦的配置里,ReplicationValve被配置成下面這樣1<Valve 你是否注意到,filt

溫馨提示

  • 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

提交評論