Tomcat集群搭建超详细
生活随笔
收集整理的這篇文章主要介紹了
Tomcat集群搭建超详细
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
TOMCAT集群?
目錄?
TOMCAT集群 1?
1 集群 1?
1.1 什么是集群 1?
1.2 集群的特性 1?
1.3 集群的分類 1?
1.4 TOMCAT集群配置的優缺點 2?
1.5 APACHE+TOMCAT 2?
1.6 環境說明 2?
2 軟件安裝 3?
2.1 安裝說明 3?
2.2 JDK安裝 3?
2.3 APACHE安裝 4?
2.4 TOMCAT安裝 4?
3 集群配置 6?
3.1 APACHE+MOD_JK+TOMCAT配置 6?
3.2 測試 7?
4 SESSION復制 8?
4.1 SESSION復制配置 8?
4.2 測試 10?
1 集群?
1.1 什么是集群?
集群是一組協同工作的服務實體,用以提供比單一服務實體更具擴展性與可用性的服務平臺。在客戶端看來,一個集群就象是一個服務實體,但 事實上集群由一組服務實體組成。?
1.2 集群的特性?
與單一服務實體相比較,集群提供了以下兩個關鍵特性:?
1,可擴展性--集群的性能不限于單一的服務實體,新的服 務實體可以動態地加入到集群,從而增強集群的性能。?
2, 高可用性--集群通過服務實體冗余使客戶端免于輕易遇到out of service的警告。在集群中,同樣的服務可以由多個服務實體提供。如果一個服務實體失敗了,另一個服務實體會接管失敗的服務實體。集群提供的從一個出 錯的服務實體恢復到另一個服務實體的功能增強了應用的可用性。?
為了具有可擴展性和高可用性特點,集群的必須具備以下兩大能力:?
(1) 負 載均衡--負載均衡能把任務比較均衡地分布到集群環境下的計算和網絡資源。?
(2) 錯誤恢復--由于某種原因,執行某個任務的資源出現故障,另一服 務實體中執行同一任務的資源接著完成任務。這種由于一個實體中的資源不能工作,另一個實體中的資源透明的繼續完成任務的過程叫錯誤恢復。?
負載均衡 和錯誤恢復都要求各服務實體中有執行同一任務的資源存在,而且對于同一任務的各個資源來說,執行任務所需的信息視圖(信息上下文)必須是一樣的。?
1.3 集群的分類?
集群主要分成三大類:高可用集群(High Availability Cluster/HA), 負載均衡集群(Load Balance Cluster),高性能計算集群(High Performance Computing Cluster/HPC)?
(1) 高可用集群(High Availability Cluster/HA):一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以將集群中的某節點進行離線維護再上線,該過程并不影響整個集群的運行。常見的就是2個節點做 成的HA集群,有很多通俗的不科學的名稱,比如"雙機熱備", "雙機互備", "雙機",高可用集群解決的是保障用戶的應用程序持續對外提供服 務的能力。?
(2) 負載均衡集群(Load Balance Cluster):負載均衡集群運行時一般通過一個或者多個前端負載均衡器將工作負載分發到后端的一組服務器上,從而達到將工作負載分發。這樣的計算機集群有時也被稱為服務器群(Server Farm)。一般web服務器集群、數據庫集群 和應用服務器集群都屬于這種類型。這種集群可以在接到請求時,檢查接受請求較少,不繁忙的服務器,并把請求轉到這些服務器 上。從檢查其他服務器狀態這一點上 看,負載均衡和容錯集群很接近,不同之處是數量上更多。?
(3) 高性能計算集群(High Performance Computing Cluster/HPC):高性能計算集群采用將計算任務分配到集群的不同計算節點而提高計算能力,因而主要應用在科學計算領域。這類集群致力于提供單個計算機所不能提供的強大的計算能力?
1.4 Tomcat集群配置的優缺點?
通常配置tomcat集群有三種方式:使用DNS輪詢,使用apache r-proxy代理方式,使用apache mod_jk方式。?
(1)DNS輪詢的缺點:當集群中某臺服務器停止之后,用戶由于dns緩存的緣故,便無法訪問服務,必 須等到dns解析更新,或者這臺服務器重新啟動。還有就是必須把集群中的所有服務端口暴露給外界,沒有用apache做前置代理的方式安全,并 且占用大量公網IP地址,而且tomcat還要負責處理靜態網頁資源,影響效率。優點是集群配置最簡單,dns設置也非常簡單。?
(2)R- proxy的缺點:當其中一臺tomcat停止運行的時候,apache仍然會轉發請求過去,導致502網關錯誤。但是只要服務器再啟動就不存 在這個問題。?
(3)mod_jk方式的優點是,Apache 會自動檢測到停止掉的tomcat,然后不再發請求過去。缺點就是,當停 止掉的tomcat服務器再次啟動的時候,Apache檢測不到,仍然不會轉發請求過去。?
R-proxy和mod_jk的共同優點是.可 以只將Apache置于公網,節省公網IP地址資源。可以通過設置來實現Apache專門負責處理靜態網頁,讓Tomcat專門負責處理jsp和 servlet等動態請求。共同缺點是:如果前置Apache代理服務器停止運行,所有集群服務將無法對外提供。R-proxy和 mod_jk對靜態頁面請求的處理,都可以通設置來選取一個盡可能優化的效果。這三種方式對實現最佳負載均衡都有一定不足,mod_jk相對好些,可以通過設置lbfactor參數來分配請求任務。?
1.5 Apache+Tomcat?
Apache+ Tomcat整合的目標:?
(1) 可以提高整體web服務器性能,將動態頁面交給tomcat處理,將靜態文件交給apache處理,可以大大提高服務器的靜態文件處理性能。?
(2) 可以實現web服務器的負載均衡,服務器可采用集群的方式來響應客戶端請求。Apache的作用是做代理,將請求分發給各個tomcat處理,tomcat作為集群服務器處理請求。這樣可以提高整體web服務器性能和訪問量。?
(3) 可以實現無縫升級應用程序和容錯處理,在tomcat集群中如果有一個tomcat掛掉了,用戶還可以通過其他tomcat來進行訪問,同時如果我們想升級應用程序,我們可以通過升級每個tomcat的應用程序來實現升級,在升級的過程中不會影響web服務器的訪問。?
下面就是以1個apache+2個tomcat通過mod_jk配置集群。?
1.6 環境說明?
所需軟件包:?
JDK:jdk-6u7-linux-i586.bin?
Apache:httpd-2.2.19.tar.gz?
Tomcat:apache-tomcat-7.0.16.tar.gz?
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so?
服務器:?
服務器系統版本信息:CentOS release 5.3?
服務器IP:172.30.4.6?
2 軟件安裝?
2.1 安裝說明?
將下載好的軟件保存到服務器上:目錄為/usr/tomcattest,也可以建立其他文件夾保存。?
JDK:jdk-6u7-linux-i586.bin?
Apache:httpd-2.2.19.tar.gz?
Tomcat:apache-tomcat-7.0.16.tar.gz?
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so?
2.2 JDK安裝?
Java代碼?? 1)??拷貝軟件包?? [root@172-30-4-6?~]#?mkdir?/usr/java?????#創建jdk安裝目錄?? [root@172-30-4-6?~]#?cd?/usr/tomcattest???#進入jdk軟件包目錄?? [root@172-30-4-6?tomcattest]#?cp?jdk-6u7-linux-i586.bin?/usr/java??#將jdk安裝文件拷貝到安裝目錄?? ?? 2)??安裝JDK?? [root@172-30-4-6?tomcattest]#?cd?/usr/java??#進入jdk安裝目錄?? [root@172-30-4-6?java]#?./?jdk-6u7-linux-i586.bin???#執行安裝jdk文件?? ?? 3)??配置環境變量?? ?[root@172-30-4-6?java]?vim?/etc/profile???#修改系統環境變量文件?? #添加內容如下:?? export?JAVA_HOME=/usr/java/jdk1.6.0_02?? ?????????export?JAVA_BIN=/usr/java/jdk1.6.0_02/bin?? ????????export?PATH=$PATH:$JAVA_HOME/bin?? ????????export?CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar?? ????????????export?JAVA_HOME?JAVA_BIN?PATH?CLASSPATH?? [root@172-30-4-6?profile]#?cd?/usr/bin????? ????[root@172-30-4-6?profile]#?ln?-s?-f?/usr/java/jdk1.6.0_02/jre/bin/java??? ?????[root@172-30-4-6?profile]#?ln?-s?-f?/usr/java/jdk1.6.0_02/bin/javac???? ?? 4)??測試?? [root@172-30-4-6?profile]#?java?-version?????????#查看java安裝版本?? 顯示結果:java?version?"jdk1.6.0_02"??
2.3 Apache安裝?
Java代碼?? 1)??解壓?? [root@172-30-4-6?~]#?cd?/usr/tomcattest???#進入apache軟件包目錄?? [root@172-30-4-6?tomcattest]#?tar?-zxvf?httpd-2.2.19.tar.gz??#解壓apache安裝文件?? ?? 2)??安裝?? [root@172-30-4-6?tomcattest]#?cd?httpd-2.2.19??????#進入apache安裝目錄?? [root@172-30-4-6?httpd-2.2.19]#?./configure?--prefix=/usr/apache???#?configure參數可以自己根據需要修改,可以使用—help獲得相關命令參數信息。?? [root@172-30-4-6?httpd-2.2.19]#?make????#編譯?? [root@172-30-4-6?httpd-2.2.19]#?make?install???#安裝?? ?? 3)??啟動?? [root@172-30-4-6?httpd-2.2.19]#?cd?/usr/apache/??#進入apache安裝目錄?? [root@172-30-4-6?apache]#?./bin/apachectl?start???#啟動apache服務器?? ?????? 4)??測試?? 訪問apache服務器:http://172.30.4.6?? 響應結果:It?works!??#apache服務器安裝成功??
2.4 Tomcat安裝?
Java代碼?? 1.??解壓?? [root@172-30-4-6?~]#?cd?/usr/tomcattest???#進入tomcat軟件包目錄?? [root@172-30-4-6?tomcattest]#?tar?–zxvf?apache-tomcat-7.0.16.tar.gz??#解壓tomcat安裝包?? ?? 2.??安裝?? [root@172-30-4-6?tomcattest]#?cp?-P?apache-tomcat-7.0.16?/usr/tomcat1??#拷貝tomcat1?? [root@172-30-4-6?tomcattest]#?cp?-P?apache-tomcat-7.0.16?/usr/tomcat2??#拷貝tomcat2?? ?????? 3.??配置?? 因為該例子是在同一臺服務器上安裝兩個tomcat服務器,避免服務器端口使用沖突,tomcat1端口采用默認配置,tomcat2端口需要重新配置。?? [root@172-30-4-6?tomcattest]#?cd?/usr/tomcat2/conf???#進入tomcat2配置目錄,可修改server.xml配置文件?? [root@172-30-4-6?tomcattest]#?cd?/usr/tomcat1/conf???#進入tomcat1配置目錄,可修改server.xml配置文件?? [root@172-30-4-6?conf]#?vim?server.xml????????#修改tomcat2配置文件?? (1)?修改server端口號?? #tomcat1?默認配置?? <Server?port="8005"?shutdown="SHUTDOWN">?? #tomcat2?修改端口號為9005?? <Server?port="9005"?shutdown="SHUTDOWN">?? ?? (2)?修改HTTP?connector端口號?? #tomcat1默認配置?? <Connector?port="8080"?protocol="HTTP/1.1"??? ???????????????connectionTimeout="20000"??? ???????????????redirectPort="8443"?/>?? ????#tomcat2?修改端口號為9080?? ????<Connector?port="9080"?protocol="HTTP/1.1"??? ???????????????connectionTimeout="20000"??? ???????????????redirectPort="8443"?/>?? ?? (3)?修改?AJP?connector?端口號?? #tomcat1?默認配置?? <Connector?port="8009"?protocol="AJP/1.3"?redirectPort="8443"?/>?? #tomcat2?修改端口號9009?? <Connector?port="9009"?protocol="AJP/1.3"?redirectPort="8443"?/>?? ?? (4)?修改?engine?名稱?? #tocmat1?修改jvmRoute=”tomcat1”?? <Engine?name="Catalina"?defaultHost="localhost"?jvmRoute="tomcat1">?? #tocmat2?修改jvmRoute=”tomcat2”?? <Engine?name="Catalina"?defaultHost="localhost"?jvmRoute="tomcat2">?? ?? 4.??啟動?? [root@172-30-4-6?tomcattest]#?/usr/tomcat1/bin/startup.sh????#啟動tomcat1?? [root@172-30-4-6?tomcattest]#?/usr/tomcat1/bin/startup.sh????#啟動tomcat2?? ?? 5.??測試?? #tomcat1測試?? http://172.30.4.6:8080?? #tomcat2?測試?? http://172.30.4.6:9080?? ?? 結果:顯示tomcat首頁??
3 集群配置?
3.1 apache+mod_jk+tomcat配置?
Java代碼?? 1,??httpd.conf的配置??? [root@172-30-4-6?~]#?cd?/usr/apache/conf?????????#進入apache配置目錄?? [root@172-30-4-6?conf]#?vim?httpd.conf?????????#修改httpd.conf配置文件?? ????????Include?conf/mod_jk.conf????????????#增加include配置?? ?? 2,??mod_jk.conf的配置?? [root@172-30-4-6?conf]#?touch?mod_jk.conf??????#創建mod_jk.conf文件?? [root@172-30-4-6?conf]#?vim?mod_jk.conf???????#修改mod_jk配置?? #mod_jk?配置mod_jk包?? LoadModule?jk_module?modules/mod_jk-1.2.31-httpd-2.2.x.so?? #workers?配置工作負責文件?? JkWorkersFile?conf/workers.properties?? #jk?log?配置jk日志文件?? JkLogFile?logs/mod_jk.log?? #jk?log?leve?配置日志級別?? JkLogLevel?info?? #?配置jk日志內存共享?? JkShmFile?logs/mod_jk.shm?? #balancer?配置負載均衡模式?? JkMount?/*.jsp?balancer?? ?? [root@172-30-4-6?conf]#?cp?/usr/tomcattest/mod_jk-1.2.31-httpd-2.2.x.so?/usr/apache/modules????#將mod_jkb包拷貝到apache的modules目錄下?? ?? 3,??workers.properties的配置?? [root@172-30-4-6?conf]#?touch?workers.properties??????#創建worker.properties文件?? [root@172-30-4-6?conf]#?vim?workers.properties?? #tomcat1的配置?? worker.tomcat1.port=8009?? worker.tomcat1.host=172.30.4.6?? worker.tomcat1.reference=worker.template?? worker.tomcat1.activation=A?? #worker.tomcat1.lbfactor=1?? #tomcat2?的配置?? worker.tomcat2.port=9009?? worker.tomcat2.host=172.30.4.6?? worker.tomcat2.reference=worker.template?? worker.tomcat2.activation=A?? #worker.tomcat2.lbfactor=1?? worker.list=balancer?? #balancer?負載配置?? worker.balancer.type=lb?? worker.balancer.balance_workers=tomcat1,tomcat2?? worker.balancer.sticky_session=1?? #tempalte?負載模板配置?? worker.template.type=ajp13??
3.2 測試?
1, 創建測試項目?
新建一個項目:項目名稱都為TestTomcat?
新建一個jsp頁面:名稱為testjsp.jsp?
Java代碼?? <%@?page?language="java"?import="java.util.Date"contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"%>?? ?? <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">?? <html>?? <head>?? <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">?? <title>歡迎訪問</title>?? </head>?? <body>?? <%?? System.out.println(new?Date()+"=============tomcat1=================");?? %>?? tomcat1=======<%=new?Date()%>?? </body>?? </html>??
2, 發布項目?
(1)將測試項目打包,包名為TestTomcat.war,將測試項目發布到tomcat1服務器上 。?
(2)修改項目testjsp.jsp文件?
Java代碼?? <%@?page?language="java"?import="java.util.Date"contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"%>?? ?? <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">?? <html>?? <head>?? <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">?? <title>歡迎訪問</title>?? </head>?? <body>?? <%?? System.out.println(new?Date()+"=============tomcat2=================");?? %>?? tomcat2=======<%=new?Date()%>?? </body>?? </html>??
(3)將修改后的項目TestTomcat.war發布到tomcat2服務器上?
3, 測試集群?
分別在不同的客戶端上訪問apache代理服務器。?
http://172.30.4.6/TestTomcat/testjsp.jsp?
訪問結果:?
tomcat2=======Wed Jun 29 13:25:03 CST 2011?
或者?
tomcat1======Wed Jun 29 13:26:03 CST 2011?
4 Session復制?
在Tomcat集群中實現session同步,可以通過session共享和復制來實現,下面以session復制來實現session同步。?
4.1 Session復制配置?
1, Tomcat中server.xml的配置?
[root@172-30-4-6 ~]# cd /usr/tomcat1/conf?????? #進入tomcat配置目錄?
[root@172-30-4-6 conf]# vim server.xml????????? #修改server.xml配置?
# 在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">后面加上以下配置:?
Java代碼?? <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"???#默認為auto,改為自己的IP?? ??????????????????????port="4000"????#同一臺服務器上的tomcat必須修改為不同的端口,tomcat1修改為4001,tomcat2修改為4002。?? ??????????????????????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>??
#分別給集群中每個tomcat在Engine后添加cluster配置,需要修改紅色部分的配置:?
address=”172.30.4.6”?? #本機IP地址?
port=”4001”? #同一機器需要修改端口號,tomcat1為4001,tomcat2為4002?
2, Tomcat應用項目中web.xml的配置?
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps?? #進入到web應用項目中?
[root@172-30-4-6 webapps]# vim /TestTomcat/WEB-INF/web.xml???? #修改web.xml?
#在web.xml文件中加入?
Java代碼?? <!--此應用將與群集服務器復制Session-->?? <distributable/>??
4.2 測試?
1, 修改項目文件?
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps?? #進入到web應用項目中?
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp???? #修改testjsp.jsp?
Java代碼?? <%@?page?language="java"?import="java.util.Date"contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"%>?? ?? <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">?? <html>?? <head>?? <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">?? <title>歡迎訪問</title>?? </head>?? <body>?? <%?? System.out.println(new?Date()+"=============tomcat1=================");?? session.setAttribute("name",?"tomcat1");?? %>?? tomcat1=======<%=new?Date()%>===<%=session.getId()?%>===<%=session.getAttribute("name")?%>?? </body>?? </html>??
[root@172-30-4-6 ~]# cd /usr/tomcat2/webapps?? #進入到web應用項目中?
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp???? #修改testjsp.jsp?
Java代碼?? <%@?page?language="java"?import="java.util.Date"contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"%>?? ?? <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">?? <html>?? <head>?? <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">?? <title>歡迎訪問</title>?? </head>?? <body>?? <%?? System.out.println(new?Date()+"=============tomcat2=================");?? %>?? tomcat2=======<%=new?Date()%>===<%=session.getId()?%>===<%=session.getAttribute("name")?%>?? </body>?? </html>??
2, 測試?
(1) 訪問http://172.30.4.6/TestTomcat/testjsp.jsp?
頁面顯示結果為:?
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1?
(2) 關閉tomcat1?
[root@172-30-4-6 ~]# /usr/tomcat1/bin/shutdown.sh?
(3) 訪問http://172.30.4.6/TestTomcat/testjsp.jsp?
頁面顯示結果為:?
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1?
#證明session復制成功
目錄?
TOMCAT集群 1?
1 集群 1?
1.1 什么是集群 1?
1.2 集群的特性 1?
1.3 集群的分類 1?
1.4 TOMCAT集群配置的優缺點 2?
1.5 APACHE+TOMCAT 2?
1.6 環境說明 2?
2 軟件安裝 3?
2.1 安裝說明 3?
2.2 JDK安裝 3?
2.3 APACHE安裝 4?
2.4 TOMCAT安裝 4?
3 集群配置 6?
3.1 APACHE+MOD_JK+TOMCAT配置 6?
3.2 測試 7?
4 SESSION復制 8?
4.1 SESSION復制配置 8?
4.2 測試 10?
1 集群?
1.1 什么是集群?
集群是一組協同工作的服務實體,用以提供比單一服務實體更具擴展性與可用性的服務平臺。在客戶端看來,一個集群就象是一個服務實體,但 事實上集群由一組服務實體組成。?
1.2 集群的特性?
與單一服務實體相比較,集群提供了以下兩個關鍵特性:?
1,可擴展性--集群的性能不限于單一的服務實體,新的服 務實體可以動態地加入到集群,從而增強集群的性能。?
2, 高可用性--集群通過服務實體冗余使客戶端免于輕易遇到out of service的警告。在集群中,同樣的服務可以由多個服務實體提供。如果一個服務實體失敗了,另一個服務實體會接管失敗的服務實體。集群提供的從一個出 錯的服務實體恢復到另一個服務實體的功能增強了應用的可用性。?
為了具有可擴展性和高可用性特點,集群的必須具備以下兩大能力:?
(1) 負 載均衡--負載均衡能把任務比較均衡地分布到集群環境下的計算和網絡資源。?
(2) 錯誤恢復--由于某種原因,執行某個任務的資源出現故障,另一服 務實體中執行同一任務的資源接著完成任務。這種由于一個實體中的資源不能工作,另一個實體中的資源透明的繼續完成任務的過程叫錯誤恢復。?
負載均衡 和錯誤恢復都要求各服務實體中有執行同一任務的資源存在,而且對于同一任務的各個資源來說,執行任務所需的信息視圖(信息上下文)必須是一樣的。?
1.3 集群的分類?
集群主要分成三大類:高可用集群(High Availability Cluster/HA), 負載均衡集群(Load Balance Cluster),高性能計算集群(High Performance Computing Cluster/HPC)?
(1) 高可用集群(High Availability Cluster/HA):一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以將集群中的某節點進行離線維護再上線,該過程并不影響整個集群的運行。常見的就是2個節點做 成的HA集群,有很多通俗的不科學的名稱,比如"雙機熱備", "雙機互備", "雙機",高可用集群解決的是保障用戶的應用程序持續對外提供服 務的能力。?
(2) 負載均衡集群(Load Balance Cluster):負載均衡集群運行時一般通過一個或者多個前端負載均衡器將工作負載分發到后端的一組服務器上,從而達到將工作負載分發。這樣的計算機集群有時也被稱為服務器群(Server Farm)。一般web服務器集群、數據庫集群 和應用服務器集群都屬于這種類型。這種集群可以在接到請求時,檢查接受請求較少,不繁忙的服務器,并把請求轉到這些服務器 上。從檢查其他服務器狀態這一點上 看,負載均衡和容錯集群很接近,不同之處是數量上更多。?
(3) 高性能計算集群(High Performance Computing Cluster/HPC):高性能計算集群采用將計算任務分配到集群的不同計算節點而提高計算能力,因而主要應用在科學計算領域。這類集群致力于提供單個計算機所不能提供的強大的計算能力?
1.4 Tomcat集群配置的優缺點?
通常配置tomcat集群有三種方式:使用DNS輪詢,使用apache r-proxy代理方式,使用apache mod_jk方式。?
(1)DNS輪詢的缺點:當集群中某臺服務器停止之后,用戶由于dns緩存的緣故,便無法訪問服務,必 須等到dns解析更新,或者這臺服務器重新啟動。還有就是必須把集群中的所有服務端口暴露給外界,沒有用apache做前置代理的方式安全,并 且占用大量公網IP地址,而且tomcat還要負責處理靜態網頁資源,影響效率。優點是集群配置最簡單,dns設置也非常簡單。?
(2)R- proxy的缺點:當其中一臺tomcat停止運行的時候,apache仍然會轉發請求過去,導致502網關錯誤。但是只要服務器再啟動就不存 在這個問題。?
(3)mod_jk方式的優點是,Apache 會自動檢測到停止掉的tomcat,然后不再發請求過去。缺點就是,當停 止掉的tomcat服務器再次啟動的時候,Apache檢測不到,仍然不會轉發請求過去。?
R-proxy和mod_jk的共同優點是.可 以只將Apache置于公網,節省公網IP地址資源。可以通過設置來實現Apache專門負責處理靜態網頁,讓Tomcat專門負責處理jsp和 servlet等動態請求。共同缺點是:如果前置Apache代理服務器停止運行,所有集群服務將無法對外提供。R-proxy和 mod_jk對靜態頁面請求的處理,都可以通設置來選取一個盡可能優化的效果。這三種方式對實現最佳負載均衡都有一定不足,mod_jk相對好些,可以通過設置lbfactor參數來分配請求任務。?
1.5 Apache+Tomcat?
Apache+ Tomcat整合的目標:?
(1) 可以提高整體web服務器性能,將動態頁面交給tomcat處理,將靜態文件交給apache處理,可以大大提高服務器的靜態文件處理性能。?
(2) 可以實現web服務器的負載均衡,服務器可采用集群的方式來響應客戶端請求。Apache的作用是做代理,將請求分發給各個tomcat處理,tomcat作為集群服務器處理請求。這樣可以提高整體web服務器性能和訪問量。?
(3) 可以實現無縫升級應用程序和容錯處理,在tomcat集群中如果有一個tomcat掛掉了,用戶還可以通過其他tomcat來進行訪問,同時如果我們想升級應用程序,我們可以通過升級每個tomcat的應用程序來實現升級,在升級的過程中不會影響web服務器的訪問。?
下面就是以1個apache+2個tomcat通過mod_jk配置集群。?
1.6 環境說明?
所需軟件包:?
JDK:jdk-6u7-linux-i586.bin?
Apache:httpd-2.2.19.tar.gz?
Tomcat:apache-tomcat-7.0.16.tar.gz?
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so?
服務器:?
服務器系統版本信息:CentOS release 5.3?
服務器IP:172.30.4.6?
2 軟件安裝?
2.1 安裝說明?
將下載好的軟件保存到服務器上:目錄為/usr/tomcattest,也可以建立其他文件夾保存。?
JDK:jdk-6u7-linux-i586.bin?
Apache:httpd-2.2.19.tar.gz?
Tomcat:apache-tomcat-7.0.16.tar.gz?
Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so?
2.2 JDK安裝?
Java代碼??
2.3 Apache安裝?
Java代碼??
2.4 Tomcat安裝?
Java代碼??
3 集群配置?
3.1 apache+mod_jk+tomcat配置?
Java代碼??
3.2 測試?
1, 創建測試項目?
新建一個項目:項目名稱都為TestTomcat?
新建一個jsp頁面:名稱為testjsp.jsp?
Java代碼??
2, 發布項目?
(1)將測試項目打包,包名為TestTomcat.war,將測試項目發布到tomcat1服務器上 。?
(2)修改項目testjsp.jsp文件?
Java代碼??
(3)將修改后的項目TestTomcat.war發布到tomcat2服務器上?
3, 測試集群?
分別在不同的客戶端上訪問apache代理服務器。?
http://172.30.4.6/TestTomcat/testjsp.jsp?
訪問結果:?
tomcat2=======Wed Jun 29 13:25:03 CST 2011?
或者?
tomcat1======Wed Jun 29 13:26:03 CST 2011?
4 Session復制?
在Tomcat集群中實現session同步,可以通過session共享和復制來實現,下面以session復制來實現session同步。?
4.1 Session復制配置?
1, Tomcat中server.xml的配置?
[root@172-30-4-6 ~]# cd /usr/tomcat1/conf?????? #進入tomcat配置目錄?
[root@172-30-4-6 conf]# vim server.xml????????? #修改server.xml配置?
# 在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">后面加上以下配置:?
Java代碼??
#分別給集群中每個tomcat在Engine后添加cluster配置,需要修改紅色部分的配置:?
address=”172.30.4.6”?? #本機IP地址?
port=”4001”? #同一機器需要修改端口號,tomcat1為4001,tomcat2為4002?
2, Tomcat應用項目中web.xml的配置?
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps?? #進入到web應用項目中?
[root@172-30-4-6 webapps]# vim /TestTomcat/WEB-INF/web.xml???? #修改web.xml?
#在web.xml文件中加入?
Java代碼??
4.2 測試?
1, 修改項目文件?
[root@172-30-4-6 ~]# cd /usr/tomcat1/webapps?? #進入到web應用項目中?
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp???? #修改testjsp.jsp?
Java代碼??
[root@172-30-4-6 ~]# cd /usr/tomcat2/webapps?? #進入到web應用項目中?
[root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp???? #修改testjsp.jsp?
Java代碼??
2, 測試?
(1) 訪問http://172.30.4.6/TestTomcat/testjsp.jsp?
頁面顯示結果為:?
tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1?
(2) 關閉tomcat1?
[root@172-30-4-6 ~]# /usr/tomcat1/bin/shutdown.sh?
(3) 訪問http://172.30.4.6/TestTomcat/testjsp.jsp?
頁面顯示結果為:?
tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1?
#證明session復制成功
總結
以上是生活随笔為你收集整理的Tomcat集群搭建超详细的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ChinaSkills-网络系统管理(2
- 下一篇: Tomcat集群同步原理