Linux下搭建tomcat叢集全記錄

來源:互聯網
上載者:User
1.預期目標

本文將講述如何在Linux下搭建tomcat叢集,以及搭建過程中可能的遇到的問題和解決方案。為簡單起見,本文示範搭建的叢集只有兩個tomact節點外加一個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

當前最新版本:2.2.21
本文採用源碼方式安裝,源碼包:http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.gz
其他版本參見:http://httpd.apache.org/download.cgi

tomcat 6

當前最新版本:6.0.33
本文使用自解壓的tar.gz包進行安裝,:http://labs.renren.com/apache-mirror/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz
其他版本參見:http://tomcat.apache.org/download-60.cgi

Apache Tomcat Connector (也就是mod_jk)

當前最新版本:JK-1.2.32
本文採用源碼方式安裝,源碼包:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.32-src.tar.gz
其他版本參見:http://tomcat.apache.org/download-connectors.cgi

3.軟體安裝

3.1 安裝apache

1.進入下載好的httpd-2.2.21.tar.gz檔案所在目錄,執行解壓操作:
tar -zxvf httpd-2.2.21.tar.gz

2.進入解壓出的檔案夾根目錄:
cd httpd-2.2.21

3.進行編譯參數配置:
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all
關於configure參數的更多內容可參考:
http://httpd.apache.org/docs/2.2/en/programs/configure.html#installationdirectories

4.編譯安裝:
make
make install

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

3.2 關於在安裝apache過程中報Cannot use an external APR with the bundled APR-util錯誤的解決辦法

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

1.自源碼安裝目錄httpd-2.2.21進入apache2.2.x內建apr的安裝目錄
cd srclib/apr

2.安裝apr(此處將之安裝在/usr/local/apr下,如果系統中已經安裝apr,可找到安裝目錄進行覆蓋)
./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重新進行apache編譯配置
放回安裝根目錄httpd-2.2.21,執行:
./configure --prefix=/usr/local/apache2 \
--enable-mods-shared=all \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/bin

補充:

如果你安裝是apache-2.4以上版本,有以下幾點不同:

1、需要單獨下載apr和apr-util

apr: http://mirror.bjtu.edu.cn/apache//apr/apr-1.4.6.tar.bz2

apr-util:http://mirror.bjtu.edu.cn/apache//apr/apr-util-1.4.1.tar.bz2

2. 此外還需要安裝pcre

去http://pcre.org/下載pcre,解壓進入源碼目錄執行

./configure --prefix=/usr/local/pcre

3. 最後安裝apache時configure需要這樣配置

./configure --prefix=/usr/local/apache2 \
--enable-mods-shared=all \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/bin

--with-pcre=/usr/local/pcre

3.3 安裝Apache Tomcat Connector(mod_jk)

1.進入下載好的tomcat-connectors-1.2.32-src.tar.gz檔案所在目錄,執行解壓操作:
tar -zxvf tomcat-connectors-1.2.32-src.tar.gz

2.進入解壓出的檔案夾下的native子目錄:
cd tomcat-connectors-1.2.32-src/native

3.進行編譯參數配置:
./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

如果成功結束,你可以在/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中配置的所有連接埠進行修改,避免連接埠被佔用,一種簡單而穩妥的修改方法是將該檔案中出現的所有連接埠號碼按一種簡單的規則統一進行改動,比如在原連接埠號碼基礎上統一加1000或減1000。基於這個原則,apache-tomcat-6.0.33-1的串連連接埠修改為:6080,apache-tomcat-6.0.33-2的串連連接埠修改為:7080,其他連接埠配置同樣依照該原則。

2.開啟tomcat叢集支援
同樣是在conf/server.xml檔案裡,進行兩處改動:

改動1:為<Engine>設定jvmRoute

實際上,在server.xml裡就有一段現成的帶jvmRoute的<Engine>配置,我們可以參考這段配置為<Engine/>加個jvmRoute就可以了,對於jvmRoute的取值要特別注意:其值必須於後面要提到的mod_jk的workers.properties檔案中結點名相一致!由於那個檔案中結點名為tomcat1和tomcat2,因此,此處我們必須設定jvmRoute的值為這兩個值之一。關於這一點在tomcat官方關於Apache Tomcat Connector的文檔 http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html 也有明確提及。jvmRoute值會出現在由該結點建立的session id中,例如:在非叢集環境下,一個sessionid可能是 “xxxxxxxxx” 的格式,而在叢集環境下,如果當前結點的jvmRtomat1oute被配置為tomcat1,那由該結點產生的sessionid將變成“xxxxxxxxx.tomat1”格式,而mod_jk正是依賴於這個節點尾碼實現sticky session的,也就是把所有尾碼是tomat1的請求都發送給tomat1結點進行處理。

改動2:在<Engine/>中添加關於叢集的配置

在tomcat官方關於tomcat叢集配置的文檔:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 中,有一份預設配置:

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"                 channelSendOptions="8">          <Manager className="org.apache.catalina.ha.session.DeltaManager"                   expireSessionsOnShutdown="false"                   notifyListenersOnReplication="true"/>          <Channel className="org.apache.catalina.tribes.group.GroupChannel">            <Membership className="org.apache.catalina.tribes.membership.McastService"                        address="228.0.0.4"                        port="45564"                        frequency="500"                        dropTime="3000"/>            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"                      address="auto"                      port="4000"                      autoBind="100"                      selectorTimeout="5000"                      maxThreads="6"/>            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>            </Sender>            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>          </Channel>          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"                 filter=""/>          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"                    tempDir="/tmp/war-temp/"                    deployDir="/tmp/war-deploy/"                    watchDir="/tmp/war-listen/"                    watchEnabled="false"/>          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>        </Cluster>    

這份預設配置可以滿足大多數應用情境,因此,我們只需要將這份配置複製到<Engine/>中,tomcat的配置就全部完成了。

4.2 配置apache
開啟apache安裝目錄下的conf/httpd.conf檔案,在檔案最後追加以下內容:

# Load mod_jk moduleLoadModule jk_module modules/mod_jk.so# Specify jk log file.JkLogFile /var/log/mod_jk.log# Specify jk log level [debug/error/info]JkLogLevel info# Specify workers.properties, this file tell jk:# how many nodes and where they are.JkWorkersFile conf/workers.properties# Specify which requests should handled by which node.JkMount /* controller

關於mod_jk配置項的詳細內容,可參考:http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
上述配置中:JkWorkersFile conf/workers.properties 指明由一個workers.properties檔案來描述叢集結點的情況,因此,我們需要建立這個workers.properties檔案,並放置於conf檔案夾下,這個檔案的內容如下:

#所有節點列表,其中controller是一個邏輯結點,負責負載平衡控制,#如果JkMount中的URL指定給了controller就表示這個請求會被自動散列到某個物理節點上。#注意:真正負責處理請求的tomcat的名稱(這裡就是tomcat1,tomcat2)必須於它們在conf/server.xml#檔案中配置的jvmRout的屬性值是一致的!worker.list = controller,tomcat1,tomcat2 #========tomcat1========worker.tomcat1.port=6009       #ajp13 連接埠號碼,在tomcat下server.xml配置,預設8009worker.tomcat1.host=localhost  #tomcat的主機地址,如不為本機,請填寫ip地址worker.tomcat1.type=ajp13worker.tomcat1.lbfactor = 1    #server的加權比重,值越高,分得的請求越多#========tomcat2========worker.tomcat2.port=7009       #ajp13 連接埠號碼,在tomcat下server.xml配置,預設8009worker.tomcat2.host=localhost  #tomcat的主機地址,如不為本機,請填寫ip地址worker.tomcat2.type=ajp13worker.tomcat2.lbfactor = 1    #server的加權比重,值越高,分得的請求越多#========controller,負載平衡控制器========worker.controller.type=lbworker.controller.balance_workers=tomcat1,tomcat2   #指定分擔請求的tomcat,舊版本中的balanced_workers,已不再推薦使用!worker.controller.sticky_session=1 #sticky_session為1表示,#當某一 client的session建立之後,後續由該用戶端發起的請求,也就是這個session的所有請求都始終由第一次處理該請求的結點#負責處理(除非該結點掛掉)

到此,所有配置均已完成,啟動兩個tomcat和apache後,將某一應用同時部署到兩個tomcat中,通過apache訪問這個應用,觀察tomcat後台打出的日誌會發現,請求被隨機分配給了兩個tomcat交替執行。

備忘:應用程式要為叢集所做的準備

1. 在應用程式的web.xml中需要加入:<distributable/>元素
2. session中存放的資料(如attribute)必須實現序列化。

參考資源:

tomcat官方關於tomcat叢集配置的文檔:
http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

tomcat官方關於Apache Tomcat Connector的文檔
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

apache官方關於apache的安裝文檔
http://httpd.apache.org/docs/2.2/en/install.html

apache官方關於configure參數的文檔
http://httpd.apache.org/docs/2.2/en/programs/configure.html#installationdirectories

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.