瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          apache 集群tomcat配置參數(shù)說明

          Posted on 2011-02-15 10:37 瘋狂 閱讀(2170) 評論(0)  編輯  收藏 所屬分類: apache項(xiàng)目架構(gòu)

          Tomcat 集群配置
          打開Server.xml,shutdown, ajp, http這三個端口就不多說了,解開下面注釋
          <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
          jvmRoute的值要根據(jù)apache的配置,不能沖突。
          接著是最重要的一點(diǎn),tomcat默認(rèn)集群配置(<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>)時,配置的細(xì)節(jié)實(shí)際上被省略了,對于大多數(shù)應(yīng)用而言,使用默認(rèn)配置已經(jīng)足夠,完整的默認(rèn)配置應(yīng)該是這樣:

          Xml代碼 [url=http://tyler-zhou.javaeye.com/blog/507158]


          <!--同步異步模式由channelSendOptions參數(shù)控制,默認(rèn)值是8,為異步模式,4是同步模式。在異步模式下,可以通過加上拷貝確認(rèn)(Acknowledge)來提高可靠性,此時channelSendOptions設(shè)為10。-->  
          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="6">  
          <!---session 拷貝方式 BackupManager 只拷貝部署當(dāng)前應(yīng)用的服務(wù)器,DeltaManager 拷貝方式all to all-->  
              <Manager className="org.apache.catalina.ha.session.BackupManager"  
                  expireSessionsOnShutdown="false"  
                  notifyListenersOnReplication="true"  
                  mapSendOptions="6"/>  
              <!--   
              <Manager className="org.apache.catalina.ha.session.DeltaManager"  
              expireSessionsOnShutdown="false"  
              notifyListenersOnReplication="true"/>  
              -->  
              <!--Channel負(fù)責(zé)對tomcat集群的IO層進(jìn)行配置-->  
              <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
                  <!--Membership用于發(fā)現(xiàn)集群中的其他節(jié)點(diǎn),這里的address用的是組播地址(Multicast address,了解更多組播地址詳情請參見http://zyycaesar.javaeye.com/admin/blogs/296501),使用同一個組播地址和端口的多個節(jié)點(diǎn)同屬一個子集群,因此通過自定義組播地址和端口就可將一個大的tomcat集群分成多個子集群-->  
                  <Membership className="org.apache.catalina.tribes.membership.McastService"  
                      address="228.0.0.4"  
                      port="45564"  
                      frequency="500"  
                      dropTime="3000"/>  
                  <!--Receiver用于各個節(jié)點(diǎn)接收其他節(jié)點(diǎn)發(fā)送的數(shù)據(jù),在默認(rèn)配置下tomcat會從4000-4100間依次選取一個可用的端口進(jìn)行接收,自定義配置時,如果多個tomcat節(jié)點(diǎn)在一臺物理服務(wù)器上注意要使用不同的端口-->  
                  <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
                      address="auto"  
                      port="5001"  
                      selectorTimeout="100"  
                      maxThreads="6"/>  
                  <!--Sender用于向其他節(jié)點(diǎn)發(fā)送數(shù)據(jù),具體實(shí)現(xiàn)通過Transport配置,PooledParallelSender是從tcp連接池中獲取連接,可以實(shí)現(xiàn)并行發(fā)送,即集群中的多個節(jié)點(diǎn)可以同時向其他所有節(jié)點(diǎn)發(fā)送數(shù)據(jù)而互不影響-->  
                  <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
                      <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
                  </Sender>  
                  <!---Interceptor有點(diǎn)類似下面將要解釋的Valve,起到一個閥門的作用,在數(shù)據(jù)到達(dá)目的節(jié)點(diǎn)前進(jìn)行檢測或其他操作,如TcpFailureDetector用于檢測在數(shù)據(jù)的傳輸過程中是否發(fā)生了tcp錯誤。--->  
                  <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
                  <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
                  <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>  
            
              </Channel>  
              <!--Valve用于在節(jié)點(diǎn)向客戶端響應(yīng)前進(jìn)行檢測或進(jìn)行某些操作,ReplicationValve就是用于用于檢測當(dāng)前的響應(yīng)是否涉及Session數(shù)據(jù)的更新,如果是則啟動Session拷貝操作,filter用于過濾請求,如客戶端對圖片,css,js的請求就不會涉及Session,因此不需檢測,默認(rèn)狀態(tài)下不進(jìn)行過濾,監(jiān)測所有的響應(yīng).JvmRouteBinderValve會在前端的Apache mod_jk發(fā)生錯誤時保證同一客戶端的請求發(fā)送到集群的同一個節(jié)點(diǎn)-->  
              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
              filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>  
              <!--Deployer用于集群的farm功能,監(jiān)控應(yīng)用中文件的更新,以保證集群中所有節(jié)點(diǎn)應(yīng)用的一致性,如某個用戶上傳文件到集群中某個節(jié)點(diǎn)的應(yīng)用程序目錄下,Deployer會監(jiān)測到這一操作并把這一文件拷貝到集群中其他節(jié)點(diǎn)相同應(yīng)用的對應(yīng)目錄下以保持所有應(yīng)用的一致。這是一個相當(dāng)強(qiáng)大的功能,不過很遺憾,tomcat集群目前并不能做到這一點(diǎn),開發(fā)人員正在努力實(shí)現(xiàn)它,這里的配置只是預(yù)留了一個接口-->  
              <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
                  tempDir="/tmp/war-temp/"  
                  deployDir="/tmp/war-deploy/"  
                  watchDir="/tmp/war-listen/"  
                  watchEnabled="false"/>  
            
              <!--Listener用于跟蹤集群中節(jié)點(diǎn)發(fā)出和收到的數(shù)據(jù),也有點(diǎn)類似Valve的功能。-->  
              <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
            
          </Cluster>  
          最后在Web.xml里面加上<distributable/>,官方文檔沒有這個,但我覺得還是應(yīng)該加上,因?yàn)榘凑諛?biāo)準(zhǔn)的tomcat啟動,當(dāng)Host對象被創(chuàng)建時,一個Cluster對象(默認(rèn)配置下是SimpleTcpCluster)也同時被關(guān)聯(lián)到這個Host對象。當(dāng)某個應(yīng)用在web.xml中設(shè)置了distributable時,Tomcat將為此應(yīng)用的上下文環(huán)境創(chuàng)建一個DeltaManager。SimpleTcpCluster啟動membership服務(wù)和Replication服務(wù)。

          ---

          extra/httpd-mpm.conf 模塊  

          上邊一樣的就不貼了,主要是下邊的配置,因?yàn)槲矣昧?span style="font-family: Arial, 宋體, sans-serif; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px">mod_security模塊,所以要做一些配置,這里不做解釋了,寫的很詳細(xì),我比較喜歡在配置文件里把容易忘記的地方寫上文檔。畢竟這東西配完了就不再動了,很容易忘記

          # WinNT MPM

          # ThreadsPerChild: constant number of worker threads in the server process

          # MaxRequestsPerChild: maximum  number of requests a server process serves

          #注意:ThreadLimit指令應(yīng)當(dāng)放在ThreadsPerChild之前,否則ThreadsPerChild指令生效后ThreadLimit會失效,而導(dǎo)致不必要的錯誤 ThreadLimit必須大于等于ThreadsPerChild

          #對于mpm_winnt,ThreadLimit的默認(rèn)值是1920;對于其他MPM這個值是64

          #ThreadLimit 這個指令設(shè)置了每個子進(jìn)程可配置的線程數(shù)ThreadsPerChild上限。任何在重啟期間對這個指令的改變都將被忽略,但對ThreadsPerChild的修改卻會生效。

          #ThreadLimit 使用這個指令時要特別當(dāng)心。如果將ThreadLimit設(shè)置成一個高出ThreadsPerChild實(shí)際需要很多的值,將會有過多的共享內(nèi)存被分配。

          #如果將ThreadLimit和ThreadsPerChild設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動,或者系統(tǒng)將變得不穩(wěn)定。該指令的值應(yīng)當(dāng)和ThreadsPerChild大致保持一致

          #ThreadsPerChild 每個子進(jìn)程建立的常駐的執(zhí)行線程數(shù)。默認(rèn)值是25。子進(jìn)程在啟動時建立這些線程后就不再建立新的線程了。

          <IfModule mpm_winnt_module>

              ThreadLimit            2000

              ThreadsPerChild        2000

              MaxRequestsPerChild    2000

          </IfModule>

          主站蜘蛛池模板: 怀远县| 通道| 水富县| 右玉县| 固镇县| 陇西县| 田阳县| 大厂| 洪洞县| 江西省| 蓬安县| 博白县| 峨眉山市| 旬邑县| 冕宁县| 贵阳市| 鹤山市| 浦县| 将乐县| 涿鹿县| 江达县| 高要市| 九台市| 香港 | 临朐县| 河津市| 沙田区| 贡嘎县| 桐城市| 刚察县| 余干县| 房产| 汝城县| 曲周县| 石城县| 北流市| 泾川县| 麦盖提县| 临沭县| 宜章县| 郴州市|