apache與tomcat負載集羣的3種方法

原文地址:http://www.blogjava.net/pengo/archive/2011/04/15/348331.html

花了兩天時間學習apache與tomcat的集成方法,現在把學習成果記錄下來。
apache與tomcat負載集羣集成方法有3種jk、jk_proxy、http_proxy
本次集成使用的軟件版本:

apache:httpd-2.2.17-win32-x86-no_ssl.msi
tomcat:apache-tomcat-6.0.20.zip
jdk:jdk-6u14-windows-i586.exe

本次測試是1個apache集成兩個tomcat。
安裝apache http server省略,訪問地址爲http://127.0.0.1:8081
安裝tomcat,解壓apache-tomcat-6.0.20.zip,測試時我是把兩個tomcat分開放在不同的虛擬機,其中一個是和apache同一臺虛擬機。
兩個tomcat分別命名爲worker2和worker3
先說tomcat.worker2的配置:
server.xml
(1)配置http監聽端口,這裏端口設爲8079,該步驟非必要,只要不衝突就行了。
<Connector port="8079" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

(2)配置AJP監聽端口,這裏端口設爲8077,該步驟非必要,只要不衝突就行了。
<Connector port="8077" protocol="AJP/1.3" redirectPort="8443" />

(3)配置服務器標識,這裏標識名配置爲:worker2,添加jvmRoute="worker2",該步驟必須。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
在Engine節點啓用集羣配置,只需去掉Cluster節點前的註釋就行了,該步驟必須,配置了集羣才能實現Session複製,如果只有一個集羣,只按我下邊的配置就行了,如果多個集羣,則不能按此配置,tomcat服務器內的幫助文檔/docs/cluster-howto.html,/docs/config/cluster.html有介紹,需要的可以參考下。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
   <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 

要實現session複製,還需要在context.xml添加屬性distributable="true",如下:
<Context distributable="true">
如果不想在context.xml中添加distributable="true",還有另一方法是在應用程序的web.xml中添加<distributeable/>,不過這方法我沒有測試。
配置完成,訪問地址爲:http://127.0.0.1:8079

另一個tomcat.worker3的配置
server.xml
<Connector port="8078" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker3">
   <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
context.xml配置tomcat.worker2一樣。
配置完成,訪問地址爲:http://127.0.0.1:8078
注意:如果兩個tomcat是放在同一臺機內,server.xml可能還需要修改其它端口,請確認兩個tomcat能正常啓動。

在tomcat.worker2和tomcat.worker3的webapps文件夾添加同樣的測試文件test"test.jsp
<html>
<head>
  <title>helloapp</title>
</head>
<body>
<%
System.out.println(
"call test.jsp");

%>   
SessionID: <%=session.getId() %>  
</body>
</html>
訪問http://127.0.0.1:8078/test/test.jsp和http://127.0.0.1:8079/test/test.jsp,確保能成功訪問。

現在開始apache和tomcat的不同方式集成
1、jk方式集成
下載mod_jk-1.2.31-httpd-2.2.3.so,請下載合適的mod_jk版本,改名爲mod_jk.so放進modules文件夾內
修改conf/httpd.conf配置
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount  /*.do loadbalancer
JkMount  /*.jsp loadbalancer
增加conf/workers.properties文件,添加內容
worker.list=loadbalancer
worker.worker2.port=8077   #ajp的監聽端口
worker.worker2.host=108.88.3.105
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker3.port=9009
worker.worker3.host=127.0.0.1
worker.worker3.type=ajp13
worker.worker3.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker2,worker3 #這裏在的worker2、worker3爲需要與上邊tomcat設置的別名一致
worker.loadbalancer.sticky_session=1
配置完成任務,訪問http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問。

2、ajp_proxy
去掉httpd.conf文件中下面內容的註釋(刪掉#號),開啓下邊的配置
Include conf/extra/httpd-vhosts.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
注意:
除了mod_proxy.so,mod_proxy_balancer.so,mod_proxy_connect.so
如果是採用ajp_proxy,需要加載mod_proxy_ajp.so這個模塊;
如果是採用http_proxy,需要加載mod_proxy_http.so這個模塊;

httpd.conf,刪除剛纔jk方式的配置內容,增加下邊的配置
ProxyRequests Off
<proxy balancer://loadbalancer> 
BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=worker3
BalancerMember ajp://108.88.3.105:8077 loadfactor=1 route=worker2
</proxy>
conf/extra/httpd-vhosts.conf增加配置
<VirtualHost *:8081>
         ServerAdmin [email protected]
         ServerName localhost
         ServerAlias localhost
         ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On
         ProxyPassReverse / balancer://loadbalancer/
         ErrorLog "logs/loadbalancer-error.log"
         CustomLog "logs/loadbalancer-access.log" common
</VirtualHost>
配置完成任務,訪問http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問。

3、http_proxy
http_proxy的配置與ajp_proxy類似,修改方法2的httpd.conf配置如下,其它不變
ProxyRequests Off
<proxy balancer://loadbalancer> 
BalancerMember http://127.0.0.1:8078 loadfactor=1 route=worker3
BalancerMember http://108.88.3.105:8079 loadfactor=1 route=worker2
</proxy> 
配置完成任務,訪問http://127.0.0.1:8081/test/test.jsp,檢查是否能正常訪問。

apache_tomcat配置文件下載:apache_tomcat

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章