關於如何搭建Tomcat集羣網上仍是能搜到不少相關的教程,這裏結合我本身在實際應用中的操做作下備忘。html
案例說明:web
這裏以在本機部署的2個tomcat來作集羣。固然,tomcat集羣能夠是分佈式的,而差別也僅僅是在地址-端口的配置上,文章後面會講到。apache
部署環境:瀏覽器
操做系統: Red Hat Enterprise Linux Server release 6.0 (Santiago)(x64) JDK版本: 1.6.0_45
集羣構成:tomcat
httpd + tomcat + mod_jk
版本選擇:bash
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官網下載的)我已經作了打包並上傳至百度雲盤,須要的朋友可使用下面的連接下載:服務器
把所需文件上傳至服務器之後,咱們就能夠動手來搭建了。session
1.首先安裝httpd,過程很簡單以下:app
#解壓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屬性,這裏以tomcat一、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集羣搭建的全過程了,文章若有不當之處各位請不吝賜教。