Tomcat集羣配置

本次實驗使用的tomcat版本爲apache-tomcat-7.0.73。web

1、拷貝兩份tomcat文件,注意端口號的修改。apache

2、修改每一個tomcat下server.xml配置文件的<Engine></Engine>中加入以下配置(此配置也是tomcat配置集羣的默認配置):tomcat

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
    <Manager className="org.apache.catalina.ha.session.DeltaManager" 
        expireSessionsOnShutdown="false" 
        notifyListenersOnReplication="true"/>
    <Channel className="org.apache.catalina.tribes.group.GroupChannel">
      <Membership className="org.apache.catalina.tribes.membership.McastService" 
            address="228.0.0.4" 
            port="45564" 
            frequency="500" 
            dropTime="3000"/>
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
            address="auto" 
            port="4000"
            autoBind="100" 
            selectorTimeout="5000" 
            maxThreads="6"/>
      <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
      </Sender>
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
    </Channel>
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
            tempDir="/tmp/war-temp/" 
            deployDir="/temp/war-deploy/" 
            watchDir="/tmp/war-listen/" 
            watchEnabled="false"/>
    <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

 配置注意事項:網絡

  • 若是tomcat是配置在同一臺機器上的,那麼<Receiver/>節點中用於監聽傳遞消息的TCP端口號即屬性port不能配置相同,配置範圍是4000-4100。

3、在項目的web.xml文件中配置<distributable/>,而後就能夠運行測試了。session

4、集羣配置屬性詳解異步

  1. <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。
        tcp

  1. <Manager/>配置爲如何管理集羣的Session信息,tomcat提供了兩種管理器:

BackupManager:集羣下產生的全部Session都將放到一個備份節點,集羣下的全部節點均可以訪問此備份節點,每一個節點部署的應用能夠不同。
DeltaManager:集羣下某個節點建立、改動的Session,都將複製到其餘節點,每一個節點部署的應用要同樣。這個管理器是tomcat默認的集羣配置,適用於通常的小型集羣。工具

    • className:集羣管理器
    • expireSessionsOnShutdown:設置爲true時,一個節點關閉,將致使集羣下的全部Session失效
    • notifyListenersOnReplication:集羣下節點間的Session複製、刪除操做,是否通知session listeners
    • maxInactiveInterval:集羣下Session的有效時間(單位:s),集羣內不活動的Session,將被Tomcat回收。默認值爲1800(30min)
  1. <Channel/>是tomcat集羣之間進行通信的工具,主要包括五個組件:Membership、Receiver、Sender、Transport、Interceptor。
    1. <Membership/>維護集羣的可用節點列表。它能夠檢查到新增的節點,也能夠檢查到沒有心跳的節點
      • className:指定Membership維護類
      • address:廣播地址
      • port:廣播端口
      • frequency:發送心跳(向廣播地址發送UDP數據包)的時間間隔(單位:ms)。默認值爲500
      • dropTime:Membership在dropTime(單位:ms)內未收到某一節點的心跳,則將該節點從可用節點列表刪除。默認值爲3000
    2. <Receiver/>配置消息接收器,負責接收消息,接收器分爲兩種:BioReceiver(阻塞式)、NioReceiver(非阻塞式)
      • className:指定Receiver使用的類
      • address:接收消息的地址
      • port:接收消息的端口
      • autoBind:端口的變化區間,若是port爲4000,autoBind爲100,接收器將在4000-4099間取一個端口,進行監聽
      • selectorTimeout:NioReceiver內輪詢的超時時間
      • maxThreads:線程池的最大線程數
    3. <Sender/>配置消息發送器,負責發送消息
    4. <Transport/>分爲兩種:bio.PooledMultiSender(阻塞式)、nio.PooledParallelSender(非阻塞式)
    5. <Interceptor/>配置Cluster的攔截器
      • TcpFailureDetector:網絡、系統比較繁忙時,Membership可能沒法及時更新可用節點列表,此時TcpFailureDetector能夠攔截到某個節點關閉的信息,並嘗試經過TCP鏈接到此節點,以確保此節點真正關閉,從而更新集羣能夠用節點列表。
      • MessageDispatch15Interceptor:查看Cluster組件發送消息的方式是否設置爲Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster標籤下的channelSendOptions爲8時)。設置爲Channel.SEND_OPTIONS_ASYNCHRONOUS時,MessageDispatch15Interceptor先將等待發送的消息進行排隊,而後將排好隊的消息轉給Sender。
  2. <Valve/>能夠理解爲Tomcat的攔截器
    • ReplicationValve:在處理請求先後打日誌;過濾不涉及Session變化的請求
    • JvmRouteBinderValve:Apache的mod_jk發生錯誤時,保證同一客戶端的請求發送到集羣的同一個節點
  3. <Deployer/>同步集羣下全部節點的一致性
  4. <ClusterListener/>監聽器,監聽Cluster組件接收的消息,使用DeltaManager時,Cluster接收的信息經過ClusterSessionListener傳遞給DeltaManager
相關文章
相關標籤/搜索