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

标签: ajp 代理模式 apache | 发表时间:2013-11-21 14:05 | 作者:Andy_chq
出处:http://www.iteye.com

这一种方法,配置简单,性能也高。附AJP介绍:

apache-tomcat-7.0.35-windows-i64.zip

apache 必须是2.2.x以上版本

      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></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.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  [email protected]
         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复制。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [ajp 代理模式 apache] 推荐:

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

- - 研发管理 - ITeye博客
这一种方法,配置简单,性能也高. apache 必须是2.2.x以上版本.       AJP是Apache提供的完成与其它服务器通讯的一种协议. 在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_ajp模块.

Apache Shiro 介绍

- - CSDN博客推荐文章
什么是Apache Shiro?. Apache shiro 是一个强大而灵活的开源安全框架,可清晰地处理身份认证、授权、会话(session)和加密. Apache Shiro最主要的初衷是为了易用和易理解,处理安全问题可能非常复杂甚至非常痛苦,但并非一定要如此. 一个框架应该尽可能地将复杂的问题隐藏起来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码.

Apache Derby Papers

- -
Derby Type System (Note: if your browser shows HTML source for this page instead of displaying it, save the file locally with . It will prompt you to click on "Grant license to ASF for inclusion in ASF works", and this is the permission we need in place to host your contribution on the Derby web site..

设计模式之代理模式(Proxy)

- - 博客园_首页
这段时间一直忙于期末考试,好久没来博客园了,现在好了,终于考完了,也该过上正常的日子了. 开学就是大四的学生了,时间过的可是真快啊,转眼间大学四年已经接近尾声了. 回想大学这三年,成绩还可以吧(年级前10%),参加过各种竞赛(acm,数学建模等等),学生会也呆过(打了一年的酱油),好哥们也有那么五六个(希望以后能在一个城市发展,大学期间的宝贵财富啊),另外所谓的大学生创新实践项目也搞了一个(就算开阔一下视野吧,大学能生有什么创新呢.

Apache防止攻击

- - 小彰
为了防止恶意用户对Apache进行攻击,我们需要安装mod_security这个安全模块. mod_security 1.9.x模块的下载与安装. 下载地址: http://www.modsecurity.org/download/index.html. 建议使用1.9.x,因为2.x的配置指令与1.x完全不同,解压后进入解压目录,执行:.

Apache OpenOffice 3.4发布

- - Solidot
Apache OpenOffice的第一个版本v3.4正式发布. 主要新特性包括:改进ODF支持,包括ODF 1.2加密选项和新电子表格功能;改进Calc组件的数据透视表(Pivot Table)支持;原生支持SVG,增强图形如线帽和剪切变形;简体和繁体中文等原生语言支持;改进性能等. 在甲骨文将OpenOffice.org捐给Apache软件基金会后,OOo的命运曾存在许多争议.

Apache PDFBox 1.8.0 发布

- - 开源中国社区最新新闻
Apache PDFBox 1.8.0 发布了,该版本除了修复大量 bug 之外,还包含如下新特性:. PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具. PDF 文档加密与解密. 与 Lucene搜索引擎的集成. 填充PDF/XFDF表单数据.

Apache Log4j 2.0介绍

- - CSDN博客推荐文章
Apache Log4j 2.0介绍. 作者:chszs,转载需注明. 作者博客主页:http://blog.csdn.net/chszs. Apache Log4j是著名的Java日志框架之一,在早些年应用最广. 但近两年来,随着SLF4J和LogBack的兴起,很多流行的开源框架在日志模块方面逐步转移到SLF4J+LogBack上,Log4j日渐衰落.

Apache 的 MaxClients 與 MaxRequestsPerChild

- - SSORC.tw
對於 Apache 架設的伺服器,在遇到連線數問題上,以下參數是會考慮微調的. 不過遇到多個 VirtualHost 與連線變多時,需要適時調整. ServerLimit 與 MaxClients 是針對同時間最大連線數為多少,也等於是 Apache 程序數量,ps 一下就會有多少個 /usr/sbin/httpd 等.

apache 工作模式

- - 互联网 - ITeye博客
如果httpd -l列出prefork.c. 则表示是 prefork 工作方式. 这表明当前apache2的工作方式是 prefork. prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止.