這一種方法,配置簡單,性能也高。附AJP介紹: css
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.) html
使用這種協議,具備更高的性能,由於它採用的是二進制傳輸。比HTTP的文本傳輸要有更高的效率。在Apache中要使用mod_proxy和mod_proxy_ajp,在Tomcat中則要開啓ajp服務。 前端
1、前期準備工做:安裝用的程序(前提保證已安裝了JDK1.5以上的版本)
APAHCE 2.2.4 web
TOMCAT6.0
2、安裝過程
APAHCE安裝目錄:D:\Apache Group\Apache2。
l兩個TOMCAT目錄:自行解壓到(D:\Apache Group\集羣服務器\)下。分別爲 tomcat6_1,tomcat6_2,這幾個安裝過程就不詳細說明了。
apache
3、配置
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代理的方法,就這麼簡單。 tomcat
將下面的內容去掉註釋:(其實註釋掉前面三行也就好了,由於採用的是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 session
再找到<IfModule dir_module></IfModule>加上index.jsp修改爲
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>
app
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加上<distributable/>,確保Tomcat可以將session複製。