第四篇、Tomcat 集群


  1.  前言

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

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

           

 

 

   2. 集群的概念

            集群分類

                 ■ 縱向集群 :VERTICAL CLUSTER 多個tomcat部署在同一台服務機上,CPU資源需要搶占,只能對內存進行拓展

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

           核心概念

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

                 ■ 高可用性 : HIGH AVAILABLE 實際運行中只有一台服務器在工作,當其掛掉后其他服務器頂上  

 

           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后可發現扔可繼續操作.

 

               該篇結束

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

        

   

 

 

 

 

 

 

 

 

 

 

 

 

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM