采用ajp代理模式配置Apache+tomcat实现负载均衡

这一种方法,配置简单,性能也高。附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_1tomcat6_2,这几个安装过程就不详细说明了。

apache

 3、配置
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代理的方法,就这么简单。 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.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"  #这里的地址是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复制。

相关文章
相关标签/搜索