集羣配置(一):Tomcat集羣配置

集羣是將多個系統連接在一起組成一個系統總體的一種方案,集羣一方面爲了提高系統的負載能力,將請求由多臺系統共同分擔,另一方面也是爲了提高系統的可靠性,當某個系統崩潰時由其它系統響應請求。在這裏,我們將介紹Tomcat的集羣配置,結構見下圖:

    一、工具和資料:
    Apache的WEB服務器(apache httpd):::URL::http://httpd.apache.org/download.cgi
    JK(jk-1.2.18):http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.18/
    Tomcat(tomcat5.5):http://tomcat.apache.org/download-55.cgi
    相關文檔請參見各個工具相應提供的文檔
,工具的安裝此處不再介紹,默認地,將Apache安裝在$APACHE目錄,並將mod_jk-apache-2.2.2.so改名爲mod_jk.so放在$APACHE/ modules下(注意JK與Apache httpd的版本關係),兩個Tomcat的安裝路徑都在$TOMCAT1和$TOMCAT2。
    二、負載均衡
    1、基於request的負載均衡
    該種方式下,負載均衡器 (load balancer)會根據各個node的狀況,把每個 http request進行分發。使用這樣的均衡策略,就必須在多個節點之間複製用戶的session,實時保持整個集羣的用 戶狀態同步,這種操作被稱爲session複製(session replication)。  
    該方法的優點是客戶不會被綁定都具體的node,只要還有一個node存活,用戶狀態都不會丟失,cluster都能夠繼續工作。缺點是隨着節點的增加,可能會因廣播風暴而導致性能大幅度下降
    2、 基於session的負載均衡
    該 種方式下,當用戶發出第一個request後,負載均衡器動態的把該用戶分配到某個節點,並記錄該節點的jvm路由,以後該用戶的所有request都會被綁定這個jvm路由,用戶只會與該server發生交互,這種策略被稱爲粘性session(session sticky)。該方法的優點是響應速度快,多個節點之間無須通信。缺點也很明顯,某個node死掉以後,它負責的所有用戶都會丟失session。
    3、Broker負載均衡
    將節點進行分片,每個分片組成一個對外的服務整體,在片內使用基於request的負載均衡,而在片外使用基於session的負載均衡,使用這種處理將使地Session複製的廣播保持爲一個常量,不因爲節點增加而導致性能下降,同時又保持高可靠性,不因爲某個節點的崩潰而導致所有的Session數據的丟失
    這裏將着重介紹第一和第二種負載均衡的配置
    三、基於session的負載均衡
    1)Apache配置,在$APACHE/conf/httpd.conf中增加如下配置:

以下內容爲程序代碼:

# Load mod_jk module
# Update this path to match your modules location
LoadModule    jk_module  modules/mod_jk.so
# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
#AddModule     mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile conf/workers.properties
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile     jk/JK_LOG.txt
# Set the jk log level [debug/error/info]
JkLogLevel    info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE, 
JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format 
JkRequestLogFormat     "%w %V %T"
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount  /* loadbalancer


    2)在$APACHE/conf/中創建workers.properties,內容如下,關於Worker的詳細配置,請參見Jarkarta-Tomcat的Connector文檔

以下內容爲程序代碼:

worker.list=loadbalancer,server2,server1
# Define the first node...
worker.server2.port=8010
worker.server2.host=localhost
worker.server2.type=ajp13
worker.server2.lbfactor=1
worker.server2.local_worker=1
worker.server2.cachesize=10

# Define the first node...
worker.server1.port=8009
worker.server1.host=localhost
worker.server1.type=ajp13
worker.server1.lbfactor=1
worker.server1.local_worker=1
worker.server1.cachesize=10

# Now we define the load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=server1,server2
worker.loadbalancer.sticky_session=1


    在上面中,loadbalancer是一個虛擬Worker,並不代表任何節點,僅用於管理其他的Worker(注意其type爲lb)
    3)兩個Tomcat的配置
    根據上面的workers.properties配置修改$TOMCAT/conf/server.xml的端口配置,並修改
<Engine name="Catalina" defaultHost="localhost">爲<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1/2">
    啓動Tomcat、Apache,到功告成
    四、基於request的負載均衡
    在如上配置的基礎上增加如下配置:
    1)workers.properties的worker.loadbalancer.sticky_session值改爲0
    2)server.xml中的Cluster配置註釋去掉(注意端口,如果在同臺機上進行負載均衡,注意端口不要衝突)
    3)在應用的web.xml中增加<distributable/>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章