Tomcat 集羣

 

  1.  前言

           該篇中測試的機器發生了變動,在第一篇中設置的Apache  DocumentRoot "d:/deployment"修改成了DocumentRoot d:/cluster 。這個不影響實際操做,just換了臺電腦。javascript

  在第一篇中講了apache整合tomcat的,該篇中將闡述tomcat的集羣. css

           

 

 

   2. 集羣的概念

            集羣分類html

                 ■ 縱向集羣 :VERTICAL CLUSTER 多個tomcat部署在同一臺服務機上,CPU資源須要搶佔,只能對內存進行拓展java

                 ■ 橫向集羣 : HORIZONTAL CLUSTER  tomcat和服務機一一對應,即一臺服務器上部署一個tomcat。(可作大規模集羣)node

           核心概念web

                 ■ 負載均衡 :LOAD BALANCE  依據每一個節點對應的權重大小分配須要處理的數據apache

                 ■ 高可用性 : HIGH AVAILABLE 實際運行中只有一臺服務器在工做,當其掛掉後其餘服務器頂上  json

 

           Tomcat 官網給出的結構圖 :tomcat

    

            經過負載均衡,任務TASK分配給集羣節點.服務器

 

 

3. 集羣

     3.1 配置Apache      

      修改Apache  httpd.conf 文件 ,去掉第一篇中文件末尾追加的內容,在其後面追加以下內容:

複製代碼
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JKWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
<VirtualHost *> 
DocumentRoot d:/cluster
<Directory "d:/cluster/JMIE">
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

ServerAdmin ufida-hf:80 
ServerName ufida-hf:80
DirectoryIndex index.html index.htm index.jsp index.action
ErrorLog logs/error_log.txt
CustomLog logs/access_log.txt common

JkMount /*WEB-INF cluster 
JkMount /servlet/* cluster
JkMount /*.jsp cluster
JkMount /*.do cluster
JkMount /*.json cluster
JkMount /*.action cluster
</VirtualHost>
複製代碼

 

   備註:這裏發佈的包名稱爲JMIE

  在第一篇中使用的是 apj13 而這裏使用的是cluster,那麼這個cluster是哪裏來的呢? 很顯然是在worders.properties中進行配置,其內容以下:

複製代碼
worker.list = cluster
#node1
worker.node1.port = 8009
worker.node1.host = localhost
worker.node1.type = ajp13
worker.node1.lbfactor = 1 

#node2
worker.node2.port = 9009
worker.node2.host = localhost
worker.node2.type = ajp13
worker.node2.lbfactor = 1 

#cluster
worker.cluster.type = lb 
worker.cluster.balance_workers = node1,node2

  worker.lbcontroller.sticky_session=0
  worker.controller.sticky_session_force=false

worker.connection_pool_size=3000
worker.connection_pool_minsize=40
worker.connection_pool_timeout=10000
複製代碼

 

     

  worker.node1.host = localhost

     worker.節點名稱.host 表示的爲節點對應的主機名 ,這裏爲縱向集羣,都是在本地配置,若是須要橫向集羣直接修改對應的host便可。

 

  worker.cluster.type = lb 

      表示集羣方式爲負載均衡,其中worder.節點名稱.lbfactor 表示節點對應的權重,權重越處處理的TASK越多,這裏爲1:1 即平均分配

 

    worker.lbcontroller.sticky_session=0
    worker.controller.sticky_session_force=false

     保證session可在各節點進行復制,即關閉一臺服務器後,咱們登陸系統的session會被轉移到另一臺服務器上,客戶端仍能正常操做。

 

   worker.cluster.balance_workers = node1,node2

    表示兩個節點tomcat對應名稱爲node1,node2 。

  

    3.2 配置TOMCAT

          由上能夠須要兩個tomcat ,解壓兩個tomcat

 

          修改tomcat node1 中的conf/server.xml文件

          

 

<Server port="8005" shutdown="SHUTDOWN">

 

  節點2 在修改成8006

 

 <Connector port="8080" protocol="HTTP/1.1"   redirectPort="8443" />

 

 節點2 修改成

 <Connector port="9090" protocol="HTTP/1.1"   redirectPort="9443" />

 

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  />

 

節點2 修改成

<Connector port="9009" protocol="AJP/1.3" redirectPort="9443"  />

 

 

 

   以上爲設置tomcat在節點的名稱,節點2修改成node2 ,隨後在其下方加入:

複製代碼
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
                  channelSendOptions="6"> 
              <Manager className="org.apache.catalina.ha.session.BackupManager" 
                    expireSessionsOnShutdown="false" 
                    notifyListenersOnReplication="true" 
                    mapSendOptions="6"/> 
           <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 
             <Membership className="org.apache.catalina.tribes.membership.McastService" 
                         bind="127.0.0.1" 
                         address="228.0.0.4" 
                         port="45564" 
                         frequency="500" 
                         dropTime="3000"/> 
             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
                       address="auto" 
                       port="4001" 
                       selectorTimeout="100" 
                       maxThreads="6"/> 
             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 
               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="60000"/>  
             </Sender> 
             <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 className="org.apache.catalina.ha.tcp.ReplicationValve" 
                  filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> 
              <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 
         </Cluster>
複製代碼

 

    節點2修改成4001 。

 

     經過下圖

可知道,爲了集羣,須要在應用中的web.xml末尾追加一個<distributable/>元素 。

 

       3.3 Tomcat調優

                經過以上的操做,集羣環境已經成功搭建了,爲了讓tomcat能跑的更high,下面來對tomcat進行調優  。 

          3.3.1 優化啓動參數

                   在tomcat的bin目錄下修改catalina.bat 文件,在該文件頭上追加以下信息

set JAVA_OPTS=-server -Xms1000M -Xmx1000M 

         其中 server 表示tomcat 容許在生產環境 

              -Xms 和 -Xmx 表示最小、最大JVM內存(若是是win32的系統會受到系統內存的限制) 二者設置爲同樣,可經過以下命令來測試其合適的值

             java -Xmx1200m -version

 

         該值須要手動設置 .

 

         tomcat的啓動參數還有不少,詳細可自行查看官方文檔:http://tomcat.apache.org/tomcat-7.0-doc/index.html

 

 

   3.3.2 TOMCAT自己優化

               將

 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 

            

              替換爲:

複製代碼
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
   URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
                            enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
                            acceptCount="300"  maxThreads="300" maxProcessors="1000" minProcessors="5"
                            useURIValidationHack="false"
                                      compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>
複製代碼

 

            解釋以下:

 

複製代碼
    
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
     URIEncoding="UTF-8"  設置編碼
    minSpareThreads="25" 最大線程數
maxSpareThreads="75" 最小線程數 enableLookups="false" 關閉DNS查詢
disableUploadTimeout="true"
connectionTimeout="20000" acceptCount="300" 線程數達到maxThreads後,後續請求會被放入一個等待隊列
maxThreads="300" 最大併發數
maxProcessors="1000"
minProcessors="5" useURIValidationHack="false" 減小對url的沒必要要的檢查 compression="on"  打開壓縮功能
compressionMinSize="2048" 啓用壓縮的輸出內容大小 默認爲2KB compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 壓縮類型 />
複製代碼

      一樣的道理也能夠去修改8080端口,這裏集羣咱們只須要用到8009端口,將節點2一樣優化後可啓動兩個Tomcat 

   

 

      3.4  測試集羣

          將工程分別拷貝到兩個TOMCAT中的webapps目錄下

 

           重啓apache ,後啓動兩個tomcat  

 

 

           輸入  http://192.168.1.5/JMIE  訪問

     關閉正在運行的tomcat後可發現扔可繼續操做.

 

               該篇結束

相關文章
相關標籤/搜索