电竞比分网-中国电竞赛事及体育赛事平台

分享

Linux下搭建tomcat集群全記錄

 獨醭湉睚 2011-12-13

Linux下搭建tomcat集群全記錄


1.預(yù)期目標(biāo)

本文將講述如何在Linux下搭建tomcat集群,以及搭建過程中可能的遇到的問題和解決方法。為簡單起見,本文演示搭建的集群只有兩個tomact節(jié)點外加一個apache組成,三者將安裝在同一機器上:
apache:
安裝路徑:/usr/local/apache2
端口:90
tomcat1:
安裝路徑:/usr/local/apache-tomcat-6.0.33-1
端口:6080
tomcat2:
安裝路徑:/usr/local/apache-tomcat-6.0.33-2
端口:7080

2.所需要軟件列表

apache

當(dāng)前最新版本:2.2.21
本文采用源碼方式安裝,源碼包下載地址:http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.gz
其他版本下載地址參見:http://httpd./download.cgi

tomcat 6

當(dāng)前最新版本:6.0.33
本文使用自解壓的tar.gz包進(jìn)行安裝,下載地址:http://labs.renren.com/apache-mirror/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz
其他版本下載地址參見:http://tomcat./download-60.cgi

Apache Tomcat Connector (也就是mod_jk)

當(dāng)前最新版本:JK-1.2.32
本文采用源碼方式安裝,源碼包下載地址:http://www./dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.32-src.tar.gz
其他版本下載地址參見:http://tomcat./download-connectors.cgi

3.軟件安裝

3.1 安裝apache

1.進(jìn)入下載好的httpd-2.2.21.tar.gz文件所在目錄,執(zhí)行解壓操作:
tar -zxvf httpd-2.2.21.tar.gz

2.進(jìn)入解壓出的文件夾根目錄:
cd httpd-2.2.21

3.進(jìn)行編譯參數(shù)配置:
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all
關(guān)于configure參數(shù)的更多內(nèi)容可參考:
http://httpd./docs/2.2/en/programs/configure.html#installationdirectories

4.編譯安裝:
make
make install


5.啟動和關(guān)閉apache
完成上述步驟后,apache的安裝就結(jié)束了,通過下面的命令啟動和關(guān)閉apache:
啟動:
/usr/local/apache2/bin/apachectl start
關(guān)閉:
/usr/local/apache2/bin/apachectl stop

3.2 關(guān)于在安裝apache過程中報Cannot use an external APR with the bundled APR-util錯誤的解決辦法

有時候,在安裝apache,執(zhí)行./configure操作時會報這個錯誤,解決方法是安裝apache2.2.x自身攜帶的apr,方法為:

1.自源碼安裝目錄httpd-2.2.21進(jìn)入apache2.2.x自帶apr的安裝目錄
cd srclib/apr

2.安裝apr(此處將之安裝在/usr/local/apr下,如果系統(tǒng)中已經(jīng)安裝apr,可找到安裝目錄進(jìn)行覆蓋)
./configure --prefix=/usr/local/apr
make
make install


3.安裝apr-util
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install

4.使用新安裝的apr重新進(jìn)行apache編譯配置
放回安裝根目錄httpd-2.2.21,執(zhí)行:
./configure --prefix=/usr/local/apache2 \
--enable-mods-shared=all \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/bin


3.3 安裝Apache Tomcat Connector(mod_jk)

1.進(jìn)入下載好的tomcat-connectors-1.2.32-src.tar.gz文件所在目錄,執(zhí)行解壓操作:
tar -zxvf tomcat-connectors-1.2.32-src.tar.gz

2.進(jìn)入解壓出的文件夾下的native子目錄:
cd tomcat-connectors-1.2.32-src/native

3.進(jìn)行編譯參數(shù)配置:
./buildconf.sh

./configure --with-apxs=/usr/local/apache2/bin/apxs \
--with-java-home=$JAVA_HOME --with-java-platform=2 \
--enable-jni


4.編譯安裝:
make
make install


如果成功結(jié)束,你可以在/usr/local/apache2/modules/下找到mod_jk.so文件。

3.4 安裝tomcat
兩次解壓下載到的apache-tomcat-6.0.33.tar.gz文件至/usr/local/,并分別重命名為apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2

4.集群配置

4.1 配置tomcat

1.修改端口
對 于tomcat配置主要集中在conf/server.xml文件上。首先,鑒于是在同一機器上運行兩個tomcat實例,因此,要對 server.xml中配置的所有端口進(jìn)行修改,避免端口被占用,一種簡單而穩(wěn)妥的修改方法是將該文件中出現(xiàn)的所有端口號按一種簡單的規(guī)則統(tǒng)一進(jìn)行改動, 比如在原端口號基礎(chǔ)上統(tǒng)一加1000或減1000?;谶@個原則,apache-tomcat-6.0.33-1的連接端口修改 為:6080,apache-tomcat-6.0.33-2的連接端口修改為:7080,其他端口配置同樣依照該原則。

2.開啟tomcat集群支持
同樣是在conf/server.xml文件里,進(jìn)行兩處改動:

改動1:為<Engine>設(shè)置jvmRoute


實 際上,在server.xml里就有一段現(xiàn)成的帶jvmRoute的<Engine>配置,我們可以參考這段配置 為<Engine/>加個jvmRoute就可以了,對于jvmRoute的取值要特別注意:其值必須于后面要提到的mod_jk的 workers.properties文件中結(jié)點名相一致!由于那個文件中結(jié)點名為tomcat1和tomcat2,因此,此處我們必須設(shè)定 jvmRoute的值為這兩個值之一。關(guān)于這一點在tomcat官方關(guān)于Apache Tomcat Connector的文檔 http://tomcat./connectors-doc/webserver_howto/apache.html 也有明確提及。jvmRoute值會出現(xiàn)在由該結(jié)點創(chuàng)建的session id中,例如:在非集群環(huán)境下,一個sessionid可能是 “xxxxxxxxx” 的格式,而在集群環(huán)境下,如果當(dāng)前結(jié)點的jvmRtomat1oute被配置為tomcat1,那由該結(jié)點生成的sessionid將變成 “xxxxxxxxx.tomat1”格式,而mod_jk正是依賴于這個節(jié)點后綴實現(xiàn)sticky session的,也就是把所有后綴是tomat1的請求都發(fā)送給tomat1結(jié)點進(jìn)行處理。



改動2:在<Engine/>中添加關(guān)于集群的配置

在tomcat官方關(guān)于tomcat集群配置的文檔:http://tomcat./tomcat-6.0-doc/cluster-howto.html 中,有一份默認(rèn)配置:

  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.          channelSendOptions="8">  
  3.   
  4.   <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  5.            expireSessionsOnShutdown="false"  
  6.            notifyListenersOnReplication="true"/>  
  7.   
  8.   <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  9.     <Membership className="org.apache.catalina.tribes.membership.McastService"  
  10.                 address="228.0.0.4"  
  11.                 port="45564"  
  12.                 frequency="500"  
  13.                 dropTime="3000"/>  
  14.     <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  15.               address="auto"  
  16.               port="4000"  
  17.               autoBind="100"  
  18.               selectorTimeout="5000"  
  19.               maxThreads="6"/>  
  20.   
  21.     <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  22.       <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  23.     </Sender>  
  24.     <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  25.     <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  26.   </Channel>  
  27.   
  28.   <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  29.          filter=""/>  
  30.   <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  31.   
  32.   <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  33.             tempDir="/tmp/war-temp/"  
  34.             deployDir="/tmp/war-deploy/"  
  35.             watchDir="/tmp/war-listen/"  
  36.             watchEnabled="false"/>  
  37.   
  38.   <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  39.   <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  40. </Cluster>      

這份默認(rèn)配置可以滿足大多數(shù)應(yīng)用場景,因此,我們只需要將這份配置復(fù)制到<Engine/>中,tomcat的配置就全部完成了。

4.2 配置apache
打開apache安裝目錄下的conf/httpd.conf文件,在文件最后追加以下內(nèi)容:

  1. # Load mod_jk module  
  2. LoadModule jk_module modules/mod_jk.so  
  3. # Specify jk log file.  
  4. JkLogFile /var/log/mod_jk.log  
  5. # Specify jk log level [debug/error/info]  
  6. JkLogLevel info  
  7. # Specify workers.properties, this file tell jk:  
  8. # how many nodes and where they are.  
  9. JkWorkersFile conf/workers.properties  
  10. # Specify which requests should handled by which node.  
  11. JkMount /* controller 

關(guān)于mod_jk配置項的詳細(xì)內(nèi)容,可參考:http://tomcat./connectors-doc/webserver_howto/apache.html
上 述配置中:JkWorkersFile conf/workers.properties 指明由一個workers.properties文件來描述集群結(jié)點的情況,因此,我們需要創(chuàng)建這個workers.properties文件,并放置于 conf文件夾下,這個文件的內(nèi)容如下:

  1. #所有節(jié)點列表,其中controller是一個邏輯結(jié)點,負(fù)責(zé)負(fù)載均衡控制,  
  2. #如果JkMount中的URL指定給了controller就表示這個請求會被自動散列到某個物理節(jié)點上。  
  3. #注意:真正負(fù)責(zé)處理請求的tomcat的名稱(這里就是tomcat1,tomcat2)必須于它們在conf/server.xml  
  4. #文件中配置的jvmRout的屬性值是一致的!  
  5. worker.list = controller,tomcat1,tomcat2  
  6.    
  7. #========tomcat1========  
  8. worker.tomcat1.port=6009       #ajp13 端口號,在tomcat下server.xml配置,默認(rèn)8009  
  9. worker.tomcat1.host=localhost  #tomcat的主機地址,如不為本機,請?zhí)顚慽p地址  
  10. worker.tomcat1.type=ajp13  
  11. worker.tomcat1.lbfactor = 1    #server的加權(quán)比重,值越高,分得的請求越多  
  12. #========tomcat2========  
  13. worker.tomcat2.port=7009       #ajp13 端口號,在tomcat下server.xml配置,默認(rèn)8009  
  14. worker.tomcat2.host=localhost  #tomcat的主機地址,如不為本機,請?zhí)顚慽p地址  
  15. worker.tomcat2.type=ajp13  
  16. worker.tomcat2.lbfactor = 1    #server的加權(quán)比重,值越高,分得的請求越多  
  17.   
  18. #========controller,負(fù)載均衡控制器========  
  19. worker.controller.type=lb  
  20. worker.controller.balance_workers=tomcat1,tomcat2   #指定分擔(dān)請求的tomcat,舊版本中的balanced_workers,已不再推薦使用!  
  21. worker.controller.sticky_session=1 #sticky_session為1表示,  
  22. #當(dāng)某一 client的session創(chuàng)建之后,后續(xù)由該客戶端發(fā)起的請求,也就是這個session的所有請求都始終由第一次處理該請求的結(jié)點  
  23. #負(fù)責(zé)處理(除非該結(jié)點掛掉)  

到此,所有配置均已完成,啟動兩個tomcat和apache后,將某一應(yīng)用同時部署到兩個tomcat中,通過apache訪問這個應(yīng)用,觀察tomcat后臺打出的日志會發(fā)現(xiàn),請求被隨機分配給了兩個tomcat交替執(zhí)行。

備注:應(yīng)用程序要為集群所做的準(zhǔn)備

1. 在應(yīng)用程序的web.xml中需要加入:<distributable/>元素
2. session中存放的數(shù)據(jù)(如attribute)必須實現(xiàn)序列化。

參考資源:

tomcat官方關(guān)于tomcat集群配置的文檔:
http://tomcat./tomcat-6.0-doc/cluster-howto.html

tomcat官方關(guān)于Apache Tomcat Connector的文檔
http://tomcat./connectors-doc/webserver_howto/apache.html

apache官方關(guān)于apache的安裝文檔
http://httpd./docs/2.2/en/install.html

apache官方關(guān)于configure參數(shù)的文檔
http://httpd./docs/2.2/en/programs/configure.html#installationdirectories

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多