Linux下Apache与Tomcat的完全分布式集群配置(负载均衡)
最近公司要给客户提供一套集群方案,项目组采用了Apache和Tomcat的集群配置,用于实现负载均衡的实现。
由于以前没有接触过Apache,因此有些手生,另外在网上搜寻了很多有关这方面的集群文章,但是没有一篇是可以从头到尾,配置可以成功的,或者是文件不全,解释不清等。
博主本人希望借这个机会,自己总结一份,用于分享使用。
本集群采用ajp的方式来实现,方法简单易懂。实际上对于这种集群的配置,无非就是把需要的软件等下载后,修改相应的配置文件,最后依次启动即可。
这里我把需要的应用软件和相应的配置文件贴出,大家可以对比自己的文件是否匹配。
事先说明下,本人做的是完全分布式集群,也就是真正的在不同的虚拟机上做的操作。并不是在同一台机器上做的,因此如果各位在同一台机器上做该操作的话,不建议采纳。
三台机器:
系统:CentOS 5.x
主节点:192.168.1.101
子节点1:192.168.1.151
子节点2:192.168.1.152
1. 需要用到的软件:(具体安装步骤无需描述)
apache 2.2.25 安装在主节点上 /opt/apache2
apache-tomcat-6.0.37 安装在子节点1和子节点2上 /opt/apache-tomcat-6.0.37
2.配置文件
apache安装后,需要注意三个地方需要修改:
1)ServerName localhost:80 该localhost为本地主机名,该主机名为hosts文件所显示的名字,配置错误的话,会出现 httpd:Could not reliably determine.......错误。
2)在文件的最后需要配置以下文本,用于控制集群的成员。
ProxyPass /images !
ProxyPass /css !
ProxyPass /js ! ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID ProxyPassReverse /test balancer://mycluster/ stickysession=JSESSIONID
<Proxy balancer://mycluster>
BalancerMember ajp://192.168.1.152:8009/test/ route=worker1 loadfactor=1
BalancerMember ajp://192.168.1.151:8009/test/ route=worker2 loadfactor=1
</Proxy>
SetHandler balancer-manager
该配置为Apache的反向代理,用于通过apache去访问tomcat项目。test为博主的项目Context,两个BalanceMember是集群中的成员,分别是worker1和worker2。该名称需要与后面的tomcat的server.xml文件中的名称相一致。8009端口是tomcat的ajp端口名。
最后的下面balancer-manager是用于查看负载均衡运行情况的路径配置。
该文本需要添加在
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
的上面。
3)最后还需要在
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
的上面加入下面配置:
<Location /server-status>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from all
</Location> <Location /balancer-manager> SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from all </Location>
有的朋友在网上找到的文章,配置的都正确,但是最后发现服务都可以启动,并且可以访问,但是没有实现负载均衡的效果,只是在单个节点上运行。
本人也是遇到了这种问题,最后找了很长时间,才发现需要引入上面配置。
至此为止,apache的配置就完成了,下面进行tomcat的配置。
3.Tomcat配置文件
首先说一点,Tomcat也只是配置一个文件,就是server.xml。并且里面的端口无需改动,因为是在真正的分布式中来实现的。只需要修改一个地方,就是Engine节点。
在之前的Engine节点上,加入一个属性jvmRoute,值是刚才我们提到的worker1或worker2,具体配置如下:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<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="192.168.1.152"
port="4000"
autoBind="100"
selectorTimeout="5000"
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"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<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.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
上面的配置是我们提到的worker2的配置,是在子节点2上配置的,如果在子节点1上,则只需要将其改成worker1,另外还要把Receiver的address修改成当前所在机器的IP地址。
最后把所要操作的项目放到tomcat的webapp下,另外项目本身的web.xml文件中,需要引入<distributable/>元素。
至此为止,Tomcat的配置也完成了。
4.启动测试
启动的顺序在网上看到五花八门,本人自己测试是需要先启动Apache,然后依次启动Tomcat子节点。
测试的地址 http://192.168.1.101:80/test
测试查看的负载均衡情况地址 http://192.168.1.101:80/balancer-manager
测试方法:我们可以在项目的index.jsp文件最后加入一段打印,如:
<%
system.out.println("==============");
%>
这样的话,我们开启两个tomcat的控制台去观察,如果在通过apache访问web地址以后,两个节点的控制台是交替打印的,则说明配置成功。
以上是个人的总结,本人也是第一次配置该集群,如有不成熟的地方,请下面留言。
Linux下Apache与Tomcat的完全分布式集群配置(负载均衡)的更多相关文章
- nginx+tomcat+memcached搭建服务器集群及负载均衡
在实际项目中,由于用户的访问量很大的原因,往往需要同时开启多个服务器才能满足实际需求.但是同时开启多个服务又该怎么管理他们呢?怎样实现session共享呢?下面就来讲一讲如何使用tomcat+ngin ...
- linux下apache和tomcat整合
一 Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由 ...
- linux下配置tomcat集群的负载均衡
linux下配置tomcat集群的负载均衡 一.首先了解下与集群相关的几个概念集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台.在客户端看来,一个集群就象是一个服 ...
- 用apache和tomcat搭建集群,实现负载均衡
型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问 ...
- 实战Apache+Tomcat集群和负载均衡
实战Apache+Tomcat集群和负载均衡 目录 1. 什么是J2EE集群... 3 1.1. 序言... 3 1.2. 基本术语... 3 伸缩性(Scalability): ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式
本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实操经历记录而成,碰到些出入,以及个别地方依据个人的习惯,所以在一定程度上未能保持原文的完整性,还望原著者海涵. 因原文中有较多的 ...
- 结合Apache和Tomcat实现集群和负载均衡
http://fableking.iteye.com/blog/360870 TomcatApacheJSP应用服务器Web 本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实 ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式 2 (转)
本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apa ...
- 使用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡出现的无法加载mod_jk.conf文件的问题
用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的 如果出现了问题,可以用cmd cd到Apache安装文件的bin下,运行httpd文件,错误信息就会打印出来. ...
随机推荐
- ASP.NET MVC模型绑定的6个建议(转载)
ASP.NET MVC模型绑定的6个建议 发表于2011-08-03 10:25| 来源博客园| 31 条评论| 作者冠军 validationasp.netmvc.netasp 摘要:ASP.NET ...
- Objective-C 【多态】
------------------------------------------- 多态的概念.实现以及注意事项 程序中的多态:不同的对象 以自己的方式去 响应 相同方法名(父类同 ...
- MFC通过ADO操作Access数据库
我在<VC知识库在线杂志>第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读.写Excel表格文件”和“直接通过DAO读.写Access文件”,先后给大家介绍了ODBC和DAO两 ...
- vim 的 tags 模块 与 ctags
1. 概述 一般来说,在代码中跳转,离不开 ctags. 实际上,vim 中代码跳转是由 vim tags 模块完成的,tags 模块依赖于 tags 文件. ctags(Generate tag f ...
- Eclipse启动报错Java was started but returned exit code=13
启动Eclipse的时候报错Java was started but returned exit code=13,这个错误的原因是由于eclipse版本与jdk版本不符导致的,可能你的eclipse是 ...
- 实习笔记-1:sql 2008r2 如何创建定时作业
在公司实习了近一个月,学了很多东西.这一篇是一些比较基础的东西,本人是小菜鸟,不喜欢大神来喷.大神欢迎出门点右上角.谢谢~ 说大实话,对于数据库,我在还没出来实习的时候就是只懂写一些sql语句以及知道 ...
- centos 安装qrcode 二维码
先安装yum install mingw64-pkg-config.x86_64 yum install cairo-devel 然后报错,好像是gcc版本有点低,现在的版本是4.4.7 那么接下来 ...
- win7下 mysql主从配置实现
win7下学习 mysql主从复制 一.环境: 主服务器(master):192.168.1.23 mysql版本:5.5 从服务器(slave):192.168.1.24 mysql版本:5.5 ...
- csdn博客刷点击率代码
此文为转载,亲测有效. import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; impo ...
- Python 基础篇:字符串、列表操作
字符串操作 判断是否为数字 string = "200" string.isdigit() >>false 待完善.. 列表操作 列表是我们最以后最常用的数据类型之一, ...