該篇中測試的機器發生了變動,在第一篇中設置的Apache DocumentRoot "d:/deployment"修改成了DocumentRoot d:/cluster 。這個不影響實際操做,just換了臺電腦。javascript
在第一篇中講了apache整合tomcat的,該篇中將闡述tomcat的集羣. css
集羣分類html
■ 縱向集羣 :VERTICAL CLUSTER 多個tomcat部署在同一臺服務機上,CPU資源須要搶佔,只能對內存進行拓展java
■ 橫向集羣 : HORIZONTAL CLUSTER tomcat和服務機一一對應,即一臺服務器上部署一個tomcat。(可作大規模集羣)node
核心概念web
■ 負載均衡 :LOAD BALANCE 依據每一個節點對應的權重大小分配須要處理的數據apache
■ 高可用性 : HIGH AVAILABLE 實際運行中只有一臺服務器在工做,當其掛掉後其餘服務器頂上 json
Tomcat 官網給出的結構圖 :tomcat
經過負載均衡,任務TASK分配給集羣節點.服務器
修改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 。
由上能夠須要兩個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/>元素 。
經過以上的操做,集羣環境已經成功搭建了,爲了讓tomcat能跑的更high,下面來對tomcat進行調優 。
在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
將
<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
將工程分別拷貝到兩個TOMCAT中的webapps目錄下
重啓apache ,後啓動兩個tomcat
輸入 http://192.168.1.5/JMIE 訪問
關閉正在運行的tomcat後可發現扔可繼續操做.
該篇結束