1. 程式人生 > >Tomcat叢集---Cluster節點配置

Tomcat叢集---Cluster節點配置

<!-- 
    Cluster(叢集,族) 節點,如果你要配置tomcat叢集,則需要使用此節點.
    className 表示tomcat叢集時,之間相互傳遞資訊使用那個類來實現資訊之間的傳遞.
    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
-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <!-- Manager決定如何管理叢集的Session資訊。Tomcat提供了兩種Manager:BackupManager和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) -->
<Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <!-- Channel是Tomcat節點之間進行通訊的工具。 Channel包括5個元件:Membership、Receiver、Sender、Transport、Interceptor -->
<Channel className="org.apache.catalina.tribes.group.GroupChannel"> <!-- Membership維護叢集的可用節點列表。它可以檢查到新增的節點,也可以檢查到沒有心跳的節點 className-指定Membership使用的類 address-組播地址 port-組播埠 frequency-傳送心跳(向組播地址傳送UDP資料包)的時間間隔(單位:ms)。預設值為500 dropTime-Membership在dropTime(單位:ms)內未收到某一節點的心跳,則將該節點從可用節點列表刪除。預設值為3000 注: 組播(Multicast):一個傳送者和多個接收者之間實現一對多的網路連線。 一個傳送者同時給多個接收者傳輸相同的資料,只需複製一份相同的資料包。 它提高了資料傳送效率,減少了骨幹網路出現擁塞的可能性 相同組播地址、埠的Tomcat節點,可以組成叢集下的子叢集 --> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <!-- Receiver : 接收器,負責接收訊息 接收器分為兩種:BioReceiver(阻塞式)、NioReceiver(非阻塞式) className-指定Receiver使用的類 address-接收訊息的地址 port-接收訊息的埠 autoBind-埠的變化區間 如果port為4000,autoBind為100,接收器將在4000-4099間取一個埠,進行監聽 selectorTimeout-NioReceiver內輪詢的超時時間 maxThreads-執行緒池的最大執行緒數 --> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <!-- Sender : 傳送器,負責傳送訊息 Sender內嵌了Transport元件,Transport真正負責傳送訊息 --> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <!-- Transport分為兩種:bio.PooledMultiSender(阻塞式)、nio.PooledParallelSender(非阻塞式) --> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <!-- Interceptor : Cluster的攔截器 TcpFailureDetector-網路、系統比較繁忙時,Membership可能無法及時更新可用節點列表, 此時TcpFailureDetector可以攔截到某個節點關閉的資訊, 並嘗試通過TCP連線到此節點,以確保此節點真正關閉,從而更新叢集可以用節點列表 --> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <!-- MessageDispatch15Interceptor-檢視Cluster元件傳送訊息的方式是否設定為 Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster標籤下的channelSendOptions為8時)。 設定為Channel.SEND_OPTIONS_ASYNCHRONOUS時, MessageDispatch15Interceptor先將等待發送的訊息進行排隊,然後將排好隊的訊息轉給Sender --> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <!-- Valve : 可以理解為Tomcat的攔截器 ReplicationValve-在處理請求前後打日誌;過濾不涉及Session變化的請求 vmRouteBinderValve-Apache的mod_jk發生錯誤時,保證同一客戶端的請求傳送到叢集的同一個節點 --> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <!-- Deployer : 同步叢集下所有節點的一致性。Deployer沒試驗成功過。。。 --> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <!-- ClusterListener : 監聽器,監聽Cluster元件接收的訊息 使用DeltaManager時,Cluster接收的資訊通過ClusterSessionListener傳遞給DeltaManager --> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>