對這文章發表回應
發表限制: 非會員 可以發表
發表者: 冷日 發表時間: 2017/3/3 7:40:55
採用ajp代理模式配置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_1,tomcat6_2,這幾個安裝過程就不詳細說明了。
三、配置
1、Apache配置
1.1、httpd.conf配置
修改APACHE的配置文件D:\Apache Group\Apache2\conf\httpd.conf
將以下Module的註釋去掉,這裡並沒有使用mod_jk.so進行apache和tomcat的鏈接,從2.X以後apache自身已集成了mod_jk.so的功能。只需簡單的把下面幾行去掉註釋,就相當於以前用mod_jk.so比較繁瑣的配置了。這裡主要採用了ajp代理的方法,就這麼簡單。
將下面的內容去掉註釋:(其實註釋掉前面三行也就行了,因為採用的是ajp代理)
再找到 加上index.jsp修改成
1.1.1、 在最下面加入
上面的兩個BalancerMember成員是我們配置的tomcat集群,注意上面紅色的端口號,要跟Tomcat1中的server.xml
Tomcat2的為
1.2、httpd-vhosts.conf設置
接下來進行虛擬主機的設置。APACHE的虛擬主機設置如下:
首先要修改 conf/httpd.conf找到(#Include conf/extra/httpd-vhosts.conf)
把註釋去掉。
其中的郵箱,域名和路徑根據你自己情況設置
然後再設置TOMCAT虛擬主機
2 配置 tomcat
2.1. 配置 server 的關閉
我們需要在一台機器上跑 2個不同的 tomcat ,需要修改不同的 tomcat 的關閉口,避免出現端口被佔用的情況。其中tomcat6.0用默認值,不修改。其他三個修改。在tomcat6_1\conf, tomcat6_2\conf下的 server.xml 中找到 server, 將:
XXXX 在這裡表示不同的端口:我的兩個個 tomcat 分別使用 8105,8205。
2.2. 配置 Engine
把原來的配置註釋掉,把下面一句去掉註釋。並標明jvmRoute="jvm1".
以下是原來的配置。
Tomcat6_2也要同樣配置。注意:jvmRoute配置不要一樣。
2.3. 配置 Connector
原來的默認配置。
這裡是apache和tomcat鏈接的關鍵(前面有說過),前台apache就是通過AJP協議與tomcat進行通信的,以完成負載均衡的作用。也可以用HTTP協議。大家注意它們是如何連接通信的,上面的紅色部分(port="8009")就是連接的接口了。
我的兩個Tomcat分別設置為8109和8209.
注意 此端口 必須與 httpd.Conf 中相對應的 端口相同
2.5.配置Cluster(每個tomcat中都要修改)
原來的配置。
修改為以下的代碼:
到這裡,配置完成了,需要測試的話,可採用
http://my.oschina.net/larch/blog/83807
這裡的測試方法,你會發現兩種方式會有所不同。
注意:一定要在工程的web.xml加上 ,確保Tomcat能夠將session複製。
原文出處:采用ajp代理模式配置Apache+tomcat实现负载均衡 - larch的个人页面
這一種方法,配置簡單,性能也高。附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_1,tomcat6_2,這幾個安裝過程就不詳細說明了。
三、配置
1、Apache配置
1.1、httpd.conf配置
修改APACHE的配置文件D:\Apache Group\Apache2\conf\httpd.conf
將以下Module的註釋去掉,這裡並沒有使用mod_jk.so進行apache和tomcat的鏈接,從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>
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.2、httpd-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" />
這裡是apache和tomcat鏈接的關鍵(前面有說過),前台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" #這裡的地址是D類組播地址,所有的Tomcat必須配置以一樣
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>
到這裡,配置完成了,需要測試的話,可採用
http://my.oschina.net/larch/blog/83807
這裡的測試方法,你會發現兩種方式會有所不同。
注意:一定要在工程的web.xml加上
原文出處:采用ajp代理模式配置Apache+tomcat实现负载均衡 - larch的个人页面