<!-- Cluster(集羣,族) 節點,若是你要配置tomcat集羣,則須要使用此節點. className 表示tomcat集羣時,之間相互傳遞信息使用那個類來實現信息之間的傳遞. channelSendOptions能夠設置爲二、四、八、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>