1. 程式人生 > >Linux下搭建tomcat叢集全記錄

Linux下搭建tomcat叢集全記錄

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                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


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述