Tomcat集群搭建


關於如何搭建Tomcat集群網上還是能搜到很多相關的教程,這里結合我自己在實際應用中的操作做下備忘。

案例說明:

  這里以在本機部署的2個tomcat來做集群。當然,tomcat集群可以是分布式的,而差異也僅僅是在地址-端口的配置上,文章后面會講到。

部署環境:

操作系統: Red Hat Enterprise Linux Server release 6.0 (Santiago)(x64)
JDK版本: 1.6.0_45

集群構成:

httpd + tomcat + mod_jk

版本選擇:

httpd-2.2.26
apache-tomcat-7.0.42
mod_jk-1.2.31-httpd-2.2.3 #這里寫的是httpd-2.2.3,但其實跟httpd-2.2.26也能適配

以上文件(都是我從Apache官網下載的)我已經做了打包並上傳至百度雲盤,需要的朋友可以使用下面的鏈接下載:

把所需文件上傳至服務器以后,我們就可以動手來搭建了。

1.首先安裝httpd,過程很簡單如下:

#解壓httpd包
tar -zxf httpd-2.2.26.tar.gz
cd httpd-2.2.26/

#配置預編譯選項,這里只關心輸出目錄就可以了
./configure --prefix=~/apache2
#編譯
make
#安裝
make install

 

2.部署tomcat

#解壓tomcat包,並復制成2份
tar -zxf apache-tomcat-7.0.42.tar.gz
mv apache-tomcat-7.0.42/ tomcat1/
cp -r tomcat1/ tomcat2/

2.1配置tomcat屬性,這里以tomcat1、2為例(這里需要注意的地方主要是端口,設置時不要造成沖突即可):

#修改tomcat配置文件server.xml,主要修改:Shutdown端口,Connect服務端口,AJP端口
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1" redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
#修改集群名稱和tomcat別名
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
#去掉cluster節點的注釋
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
#修改以上端口是為了避免本機內多個tomcat同時運行造成端口沖突
#修改tomcat配置文件context.xml,為<Context>節點增加distributable="true"屬性

同理,tomcat2的配置:

#修改tomcat配置文件server.xml,主要修改:Shutdown端口,Connect服務端口,AJP端口
<Server port="8007" shutdown="SHUTDOWN">
<Connector port="8082" protocol="HTTP/1.1" redirectPort="8443" />
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
#修改集群名稱和tomcat別名
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
#去掉cluster節點的注釋
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
#修改以上端口是為了避免本機內多個tomcat同時運行造成端口沖突
#修改tomcat配置文件context.xml,為<Context>節點增加distributable="true"屬性

2.2為tomcat增加個測試文件,后期測試集群性能使用:

<!--編輯webapps/test/test.jsp,主要用來測試負載均衡情況-->

<%@ page contentType="text/html; charset=GB2312" %>
<html>
    <head>
        <title>tomcat-cluster-test-page</title>
    </head>
    <body>
        SessionID: <%=session.getId() %> 
    </body>
</html>

OK,基本上tomcat的配置到這里就結束了。

 

3.為httpd增加集群配置文件

#在apache2/conf/下增加wokers.properties文件
#文件內添加內容,形式如下:

#server
worker.list=loadbalancer,jkstatus

#tomcat1
worker.tomcat1.port=8010 #該端口是tomcat1的AJP服務端口,設置方式如2.1所示
worker.tomcat1.host=localhost #如果tomcat部署在其他機器上,可填寫其服務器IP
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1

#tomcat2
worker.tomcat2.port=8011 #該端口是tomcat2的AJP服務端口,設置方式如2.1所示
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

#loadbalancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1
worker.jkstatus.type=status

3.1將mod_jk解壓到apache2/modules下並命名文件為mod_jk.so,接下來修改配置文件如下:

#編輯apache2/conf/httpd.conf,在底部增加配置:

#加載mod_jk模塊
LoadModule jk_module modules/mod_jk.so

#指定負載均衡配置文件
JkWorkersFile conf/workers.properties

#定義日志輸出
JkLogFile logs/mod_jk.log
JkLogLevel debug

#mod_jk按照訪問路徑來做請求分發
#負載均衡的監控頁面請求
JkMount /jkstatus jkstatus

#將其他任意請求都交由loadbalancer控制器處理 
JkMount /* loadbalancer

3.2為httpd手寫一個啟動控制器:

#!/bin/bash
#     file: run.sh
#     what: httpd-controller, Usage: run.sh [OPTIONS] <start|status|stop>

case "$1" in
    start)
        /tomcat/apache2/bin/apachectl -f /tomcat/apache2/conf/httpd.conf
        echo "apache-httpd started."
        ;;
    stop)
        kill -TERM `cat /tomcat/apache2/logs/httpd.pid`
        echo "apache-httpd stopped."
        ;;
    status)
        if [ -z "`ps -ef|grep httpd|grep -v grep`" ]; then
            echo "apache-httpd not started."
        else
            echo "apache-httpd is running."
        fi
        ;;
    *)
        echo "Usage: $0 [OPTIONS] <start|stop|status>"
        ;;
esac

 

4.啟動tomcat和httpd:

tomcat1/bin/startup.sh 
tomcat2/bin/startup.sh 

apache2/bin/run.sh start

啟動后,通過瀏覽器訪問下監控頁面http://192.168.1.100:8080/jkstatus

 

訪問http://192.168.1.100:8080/test/test.jsp,頁面顯示正常:

那么我們來找個機器測試下負載均衡性能,測試結果如下:

[tomcat@server ~/test]$for((i=0;i<1000;i++))
> do
>   wget http://192.168.1.100:8080/test/test.jsp 2>/dev/null
> done
[tomcat@server ~/test]$awk -F. '/SessionID/{a[$2]++}END{for(i in a){print i, a[i]}}' test.jsp*
tomcat1   500
tomcat2   500

從結果來看:負載后,tomcat接收到的請求占比差不多1:1,還是不錯的。

關掉tomcat1,然后測試下訪問會不會出現問題:

[tomcat@server ~]tomcat1/bin/shutdown.sh
[tomcat@server ~]cd test/
[tomcat@server ~/test]$for((i=0;i<1000;i++))
>do
>wget http://192.168.1.100:8080/test/test.jsp 2>/dev/null
>done
[tomcat@server ~/test]
[tomcat@server ~/test]$awk -F. '/SessionID/{a[$2]++}END{for(i in a){print i, a[i]}}' test.jsp*
tomcat2 1000

OK,所有請求都轉發到tomcat2去了,說明節點故障也可以應付。tomcat集群搭建成功。

 

以上即是tomcat集群搭建的全過程了,文章如有不當之處各位請不吝賜教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM