采用ajp代理模式配置Apache+tomcat實現負載均衡

jopen 12年前發布 | 113K 次閱讀 Apache Tomcat 應用服務器

這一種方法,配置簡單,性能也高。附AJP介紹:

      AJP是Apache提供的完成與其它服務器通訊的一種協議。在Apache中通過mod_proxy_ajp模塊發送AJP數據,另外一端的服務器需要實現AJP協議,能夠接受mod_proxy_ajp模塊發送的AJP協議數據,在接受到AJP協議數據后做適當處理,并能夠將處理結果以AJP協議方式發送回給mod_proxy_ajp模塊。

       當使用單獨的服務器,在Tomcat實例前端使用本地的Web服務器時,性能要比單獨使用Tomcat及其默認的HTTP連接糟得多,即使web應用程序本身相當一部分是由靜態文件構成。如果需要將Tomcat同本地的Web服務器集成,AJP連接優于代理HTTP,將提供更好的性能。從Tomcat角度來看,AJP是最有效的。它同時具有HTTP相同的功能(When using a single server, the performance when using a native webserver in front of the Tomcat instance is most of the time significantly worse than a standalone Tomcat with its default HTTP connector, even if a large part of the web application is made of static files. If integration with the native webserver is needed for any reason, an AJP connector will provide faster performance than proxied HTTP. AJP clustering is the most efficient from the Tomcat perspective. It is otherwise functionally equivalent to HTTP clustering.)

   使用這種協議,具有更高的性能,因為它采用的是二進制傳輸。比HTTP的文本傳輸要有更高的效率。在Apache中要使用mod_proxy和mod_proxy_ajp,在Tomcat中則要開啟ajp服務。

 一、前期準備工作:安裝用的程序(前提保證已安裝了JDK1.5以上的版本)
APAHCE 2.2.4

TOMCAT6.0
二、安裝過程
APAHCE
安裝目錄:D:\Apache Group\Apache2
l兩個TOMCAT目錄:自行解壓到(D:\Apache Group\集群服務器\)下。分別為 tomcat6_1tomcat6_2,這幾個安裝過程就不詳細說明了。

 三、配置
1
Apache配置
1.1httpd.conf配置
修改APACHE的配置文件D:\Apache Group\Apache2\conf\httpd.conf
將以下Module的注釋去掉,
這里并沒有使用mod_jk.so進行apachetomcat的鏈接,從2.X以后apache自身已集成了mod_jk.so的功能。只需簡單的把下面幾行去掉注釋,就相當于以前用mod_jk.so比較繁瑣的配置了。這里主要采用了ajp代理的方法,就這么簡單。

將下面的內容去掉注釋:(其實注釋掉前面三行也就行了,因為采用的是ajp代理)

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_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

 再找到<IfModule dir_module></IfModule>加上index.jsp修改成
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>

1.1.1  在最下面加入
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8109 loadfactor=1 route=jvm1
BalancerMember ajp:// 127.0.0.1:8209 loadfactor=1 route=jvm2
</proxy>
上面的兩個BalancerMember成員是我們配置的tomcat集群,注意上面紅色的端口號,要跟Tomcat1中的server.xml  <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />  Tomcat2的為

<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" />

 1.2httpd-vhosts.conf設置
接下來進行虛擬主機的設置。APACHE的虛擬主機設置如下:
首先要修改 conf/httpd.conf找到(#Include conf/extra/httpd-vhosts.conf)
把注釋去掉。
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
在文件(extra/httpd-vhosts.conf)最下面加入
<VirtualHost *:80>
         ServerAdmin 979398098@qq.com
         ServerName localhost
         ServerAlias localhost
         ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
         ProxyPassReverse / balancer://cluster/
</VirtualHost>
其中的郵箱,域名和路徑根據你自己情況設置
然后再設置TOMCAT虛擬主機
 

2 配置 tomcat
2.1. 
配置 server 的關閉
我們需要在一臺機器上跑 2個不同的 tomcat ,需要修改不同的 tomcat 的關閉口,避免出現端口被占用的情況。其中tomcat6.0用默認值,不修改。其他三個修改。在tomcat6_1\conf, tomcat6_2\conf下的 server.xml 中找到 server, 將:
<Server port="8005" shutdown="SHUTDOWN">
改為
<Server port="XXXX" shutdown="SHUTDOWN">
XXXX
在這里表示不同的端口:我的兩個個 tomcat 分別使用 8105,8205。

2.2. 配置 Engine
把原來的配置注釋掉,把下面一句去掉注釋。并標明jvmRoute="jvm1".
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">        
以下是原來的配置。
<!-- <Engine name="Catalina" defaultHost="localhost">  -->
Tomcat6_2也要同樣配置。注意:jvmRoute配置不要一樣。
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm2"> 
2.3.
配置 Connector
原來的默認配置。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
這里是apachetomcat鏈接的關鍵(前面有說過),前臺apache就是通過AJP協議與tomcat進行通信的,以完成負載均衡的作用。也可以用HTTP協議。大家注意它們是如何連接通信的,上面的紅色部分(port="8009")就是連接的接口了。
我的兩個Tomcat分別設置為8109和8209.

注意 此端口 必須與 httpd.Conf 中相對應的 端口相同

BalancerMember ajp://127.0.0.1:8109 loadfactor=1 route=jvm1

2.5.
配置Cluster(每個tomcat中都要修改)
原來的配置。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改為以下的代碼:<Receiver port=XX/>port也要保證唯一性。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<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="5001"  
#端口保持不能重復
selectorTimeout="100"
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"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<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.ClusterSessionListener"/>
</Cluster>

到這里,配置完成了,需要測試的話,可采用

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!