admin 管理员组文章数量: 1184232
2023年12月17日发(作者:精品破解软件分享)
轻松实现Apache,Tomcat集群和负载均衡
0, 环境说明
Apache :apache_2.0.55 1 个
Tomcat: apache-tomcat-5.5.17 (zip版) 2个
mod_jk:: mod_ 1个
第一部分:负载均衡
负载均衡,就是apache将客户请求均衡的分给去处理
1.安装apche,tomcat
/ 下载Apache 2.0.55
/ 下载tomcat5.5 zip版本(解压即可,绿色版 /tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/ 下和 apache版本匹配
按照jdk,我的路径为:E:ideapacheApache2
解压两份Tomcat, 路径分别为 E:idetomcat1,E:idetomcat2
下载mod_jk
2.修改Apache配置文件
在apache安装目录下conf目录中找到
在文件最后加上下面一句话就可以了
include "E:ideapacheApache2confmod_"
2. 同目录下新建mod_文件,内容如下
#加载mod_jk Module
LoadModule jk_module modules/mod_
#指定 ties文件路径
JkWorkersFile conf/ties
#指定那些请求交给tomcat处理,"controller"为在tise里指定的负载分配控制器JkMount /*.jsp controller
3.在同目录下新建 ties文件,内容如下
= controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
=8009 #ajp13 端口号,在tomcat下配置,默认8009
=localhost #tomcat的主机地址,如不为本机,请填写ip地址
=ajp13
or = 1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
=9009 #ajp13 端口号,在tomcat下配置,默认8009
=localhost #tomcat的主机地址,如不为本机,请填写ip地址
=ajp13
or = 1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
=lb
ed_workers=tomcat1,tomcat2 #指定分担请求的tomcat
_session=1
4.修改tomcat配置文件
如果你在不同电脑上安装tomcat,tomcat的安装数量为一个,可以不必修改tomcat配置文件
我这里是在同一台电脑上安装两个tomcat,所以需要更改其中一个的设置
打开tomcat2/conf/文件
5.编写一个测试jsp
建立一个目录test.里面新建一个,内容为
<%
n("===========================");
%>
把test放到tomcat1,tomcat2的webapps下
6.启动apache,tomcat1,tomcat2,进行测试
通过 localhost/test/ 访问,查看tomcat1的窗口,可以看到打印了一行"====再刷新一次,tomcat2也打印了一条,再刷新,可以看到请求会被tomcat1,tomcat2轮流处理,实
第二部分,配置集群
只配置负载均衡还不行,还要session复制,也就是说其中任何一个tomcat的添加的sessio它tomcat, 集群内的tomcat都有相同的session
1. 修改tomcat1, tomcat2的,将集群部分配置的在注释符删掉,并将tomcat2的4001免与tomcat冲突,当然,如果是两台电脑,是不用改端口的,去掉注释符即可
2,修改测试项目test
修改,内容如下
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import=".*" %>
Server Info:
<%
n(alAddr() + " : " + alPort()+"
");%>
<%
n("
ID " + ()+"
");
// 如果有新的 Session 属性设置
String dataName = ameter("dataName");
if (dataName != null && () > 0) {
String dataValue = ameter("dataValue");
ribute(dataName, dataValue);
}
("Session 列表");
Enumeration e = ributeNames();
while (eElements()) {
String name = (String)ement();
String value = ribute(name).toString();
n( name + " = " + value+"
");
n( name + " = " + value);
}
%>
然后在test 新建WEB-INF目录,WEB-INF下新建,内容如下
注意:在你的应用的加入
ok,讲test复制到tomcat1,tomcat2的webapps下,重启apache,tomcat1,tomcat2,
输入网址 localhost/test/
新建一个 名称为 xiaoluo ,值为 cdut 的session,提交查询,新开一个ie窗口,再提交查询,个tomcat 是负载均衡,并且session同步的
Tomcat1:
type="tabase" description="User database that can be updated and saved" factory="UserDatabaseFactory" pathname="conf/" /> connectionTimeout="20000" redirectPort="8443" /> channelSendOptions="6"> expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> port="45564" frequency="500" dropTime="3000"/> port="4001" selectorTimeout="100" maxThreads="6"/> className="hputInterceptor"/> filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*. tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> resourceName="UserDatabase"/> unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> Tomcat2 SSLEngine="on" /> className="ResourcesLifecycleListener" /> type="tabase" description="User database that can be updated and saved" factory="UserDatabaseFactory" pathname="conf/" /> connectionTimeout="20000" redirectPort="8443" /> channelSendOptions="6"> expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> className="ervice" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> className="eiver" address="auto" port="4002" selectorTimeout="100" maxThreads="6"/> className="ationTransmitter"> className="ParallelSender"/> className="lureDetector"/> className="eDispatch15Interceptor"/> className="hputInterceptor"/> filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/> className="rDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> className="rSessionListener"/> resourceName="UserDatabase"/> unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 网友评论: 2 3 看测试结果图就知道了,_session=true,是可以复制的。自己可以实践看看。 tomcat 是全局session复制,集群内每个tomcat的session完全同步(也就是任何时候都完全一样的) 在大规模应用的时候,用户过多,集群内tomcat数量过多,session的全局复制就会有问题, 因此,建议tomcat的数量不要太多,5个以下为好。 4 我按照你的步骤在打印=====的时候,为什么不是tomcat1,tomcat2轮流处理,只是在一个tomcat的窗口上打印,当我关掉一个tomcat以后,另一个才可以看到打印"=========="我想问下是为什么.急请教..谢谢!!! 5 恭喜你成功了!! 第一点, 这说明你实现了session复制 第二点,同一个ie窗口的请求,默认是让一个tomcat来处理的 第二个人请求,会均衡的让其它tomcat来处理 你关掉ie,重新再访问一下,第二个tomcat就会打印====了 本质的说,同一个ie窗口的请求,也就是和服务器的一次会话(session),sessio没有清掉的时候,是会让同一个tomcat处理的 session失效后,再次建立和服务器的会话,这样就会分配新的tomcat来处理 6 不是的,我session还没调,我就做了负载均衡,我打开测试页面做测试的时候,都是同一个TOMCAT在处理,我关掉IE再打开还是一样. 但是当我关掉一个TOMCAT,再刷新的时候另一个TOMCAT才会打印====号.可能我昨天描述的不准备,让你误解了...不好意思.我想问你一下, 这种情况该如何解决呢!!!真的比较急!!! 7 你是否加了 jvmRoute呢????? 如果是的话,那么你的结果就是正确的了 如果你配置了jvmRoute, 这跟session复制没有关系,一次会话,就有一个sessionID,这个sessionID后面会跟上jvmRoute设置的值,所以一次会话,会让同一个tomcat处理 后面的session复制,只是在刚才的基础上,让session在每一个tomcat都有一份拷贝,各个tomcat的session是同步的 8 我想问下不知道为什么,我复制就是不能成功,你能再详细一点吗? 14 21 我的怎么不好用啊 sessionid不固定 两个页面有两个sessionid 请问大家怎么回事 23 请问 我配置 apache服务器后 ,页面 在 访问后无法 显示 图片,以及样式表失去作用。这是怎么回事,需要做那些配置 ,请指点。 24 我按照配置了一下,负载成功了,可是复制session有问题,怎么也不会复制,不知道有可能是哪里没有设好? 25 我也配制了,负载也成功了,也在复制session那个地方出问题了,我不知道是哪里出了错!看您的文章,在添加jvmRoute那个地方看不懂,我觉得那个地方您写的不是很清楚!能给我解答一下吗? 28 不好意思,我把改成就好了,但是并没有出现你图上tomcat日志所打出来的内容。 29 非常感谢 照你的方法可以了 但是 能不能挂个tomcat 在挂个resin呢 又是怎么设置的呢 在着这个 均衡应该有参数的 我应该在那配置呢 能不能给我讲讲哦 30 用apache proxy而不用jkmod不行的原因可能因为apache proxy还没有做到.jsp级别的识别,只到到目录级别. 31 33 我的session不能相互复制,不知道为什么?我把test放在两个tomcat目录下,还防在apache下的htdocs目录下,才能不指定端口访问test的内容。 35 你好! 很感谢你的这篇文章。 有一个问题想请教您一下: 我在配置过程中,负载均衡一直失败。即apache一直不能将一个用户的请求分配到两个服务器结点上。请问这是什么问题呢?我需要注意哪些配置? 诚望得到您的帮助,小弟我为这事做了快一个星期了 - - 37 zcm790619 回答:zcm790619 JkMount /* controller 表示把所有的请求都发到tomcat 如果要具体如action可以这么写: JkMount /*.action controller 38 39 上面的大哥,你写的文章真棒,但还是有个问题想问下你们啊: 几个不同的tomcat在实现群集session复制的时 候,session里面设置的值好像不能被复制,比如:ribute("username","zenghao"),当请求 在同一个tomcat里面的时候,可以得到并打印出session里面的username值,当请求被分配到另一个tomcat中的时候,我却得不到 username得数值.但是,在不同tomcat之间打印得sessionid相同. 请问下,这是怎么个回事啊?如果是这样的话,那我有一个首 页是由几个frame框架组成的,每个frame框架在主页面加载的时候都会请求不同的tomcat,登陆时候人员id会被设置到session中,这样 子的话跳转到首页,有的frame肯定会说找不到登陆人员id!肯定又说登陆不成功啦1 请大家帮个忙怎么解决,是配置的问题还是什么?跪求!! 41 42 我按照你上面所写配置文件,再加上include "D:Apache GroupApache2confmod_",结果apache就不能启动了,如果去掉这段就可以启动,这是怎么回事? 43 45 LZ 谢谢你的文章。这二天我配置了下。tomcat集群实现了。可是session却无法同步。 在不同的窗口可以看到不同的sessionID 新建一个 名称为 xiaoluo ,值为 cdut 的session,提交查询,新开一个ie窗口,再提交查询,如图,可以看到,两个tomcat 是负载均衡,并且session同步的 我在我的tomcat日志里却看不到LZ图里的信息。只能看到分别打印的信息。我的tomcat 在不同的机器的。 楼主帮我看看是为什么?配置文件与楼主差不多。
版权声明:本文标题:轻松实现Apache,Tomcat集群和负载均衡 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1702799520a431360.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论