tomcat學習三

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

其實<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>等同於如下配置(以下是Cluster的默認配置)

[html] view plain copy
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.                  channelSendOptions="8">  
  3.    
  4.           <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  5.                    expireSessionsOnShutdown="false"  
  6.                    notifyListenersOnReplication="true"/>  
  7.    
  8.           <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  9.             <Membership className="org.apache.catalina.tribes.membership.McastService"  
  10.                         address="228.0.0.4"  
  11.                         port="45564"  
  12.                         frequency="500"  
  13.                         dropTime="3000"/>  
  14.             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  15.                       address="auto"  
  16.                       port="4000"  
  17.                       autoBind="100"  
  18.                       selectorTimeout="5000"  
  19.                       maxThreads="6"/>  
  20.    
  21.             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  22.               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  23.             </Sender>  
  24.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  25.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  26.           </Channel>  
  27.    
  28.           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  29.                  filter=""/>  
  30.           <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  31.    
  32.           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  33.                     tempDir="/tmp/war-temp/"  
  34.                     deployDir="/tmp/war-deploy/"  
  35.                     watchDir="/tmp/war-listen/"  
  36.                     watchEnabled="false"/>  
  37.    
  38.           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  39. </Cluster>  

Cluster

Tomcat集羣配置。集羣的配置比較複雜,默認的集羣配置可以滿足一般的開發需求

常用屬性:

className-指定Cluster使用的類

channelSendOptions-Cluster發送消息的方式

channelSendOptions可以設置爲2、4、8、10,每個數字代表一種方式

2 = Channel.SEND_OPTIONS_USE_ACK(確認發送)

4 = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步發送) 

8 = Channel.SEND_OPTIONS_ASYNCHRONOUS(異步發送)

在異步模式下,可以通過加上確認發送(Acknowledge)來提高可靠性,此時channelSendOptions設爲10

Manager

Manager決定如何管理集羣的Session信息。Tomcat提供了兩種ManagerBackupManager和DeltaManager

BackupManager-集羣下的所有Session,將放到一個備份節點。集羣下的所有節點都可以訪問此備份節點

DeltaManager-集羣下某一節點生成、改動的Session,將複製到其他節點。DeltaManager是Tomcat默認的集羣Manager,能滿足一般的開發需求

使用DeltaManager每個節點部署的應用要一樣;使用BackupManager每個節點部署的應用可以不一樣

常用屬性:

className-指定實現org.apache.catalina.ha.ClusterManager接口的類

expireSessionsOnShutdown-設置爲true時,一個節點關閉,將導致集羣下的所有Session失效

notifyListenersOnReplication-集羣下節點間的Session複製、刪除操作,是否通知session listeners

maxInactiveInterval-集羣下Session的有效時間(單位:s)maxInactiveInterval內未活動的Session,將被Tomcat回收。默認值爲1800(30min)

Channel

ChannelTomcat節點之間進行通訊的工具。Channel包括5個組件:Membership、Sender、Transport、Receiver、Interceptor

Membership

Membership維護集羣的可用節點列表。它可以檢查到新增的節點,也可以檢查到沒有心跳的節點

常用屬性:

className-指定Membership使用的類

address-組播地址

port-組播端口

frequency-發送心跳(向組播地址發送UDP數據包)的時間間隔(單位:ms)。默認值爲500

dropTime-MembershipdropTime(單位:ms)內未收到某一節點的心跳,則將該節點從可用節點列表刪除。默認值爲3000

組播(Multicast):一個發送者和多個接收者之間實現一對多的網絡連接。一個發送者同時給多個接收者傳輸相同的數據,只需複製一份相同的數據包。它提高了數據傳送效率,減少了骨幹網絡出現擁塞的可能性

相同組播地址、端口的Tomcat節點,可以組成集羣下的子集羣

Sender

發送器,負責發送消息

Sender內嵌了Transport組件,Transport真正負責發送消息

Transport分爲兩種:bio.PooledMultiSender(阻塞式)nio.PooledParallelSender(非阻塞式

Receiver

接收器,負責接收消息

接收器分爲兩種:BioReceiver(阻塞式)NioReceiver(非阻塞式)

常用屬性:

className-指定Receiver使用的類

address-接收消息的地址

port-接收消息的端口

autoBind-端口的變化區間

如果port爲4000,autoBind爲100,接收器將在4000-4099間取一個端口,進行監聽

selectorTimeout-NioReceiver內輪詢的超時時間

maxThreads-線程池的最大線程數

Interceptor

Cluster的攔截器

TcpFailureDetector-網絡、系統比較繁忙時,Membership可能無法及時更新可用節點列表,此時TcpFailureDetector可以攔截到某個節點關閉的信息,並嘗試通過TCP連接到此節點,以確保此節點真正關閉,從而更新集羣可以用節點列表

MessageDispatch15Interceptor-MessageDispatch15Interceptor查看Cluster組件發送消息的方式是否設置爲Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster標籤下的channelSendOptions爲8)。設置爲Channel.SEND_OPTIONS_ASYNCHRONOUS時,MessageDispatch15Interceptor先將等待發送的消息進行排隊,然後將排好隊的消息轉給Sender

Valve

Valve可以理解爲Tomcat的攔截器

ReplicationValve-在處理請求前後打日誌;過濾不涉及Session變化的請求

JvmRouteBinderValve-Apachemod_jk發生錯誤時,保證同一客戶端的請求發送到集羣的同一個節點

Deployer

同步集羣下所有節點的一致性。Deployer沒試驗成功過。。。

ClusterListener

監聽器,監聽Cluster組件接收的消息

使用DeltaManager時,Cluster接收的信息通過ClusterSessionListener傳遞給DeltaManager

發佈了328 篇原創文章 · 獲贊 6 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章