收藏 分享(赏)

Apache配置集群.doc

上传人:scg750829 文档编号:7131998 上传时间:2019-05-06 格式:DOC 页数:11 大小:889.50KB
下载 相关 举报
Apache配置集群.doc_第1页
第1页 / 共11页
Apache配置集群.doc_第2页
第2页 / 共11页
Apache配置集群.doc_第3页
第3页 / 共11页
Apache配置集群.doc_第4页
第4页 / 共11页
Apache配置集群.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、出自:http:/ 和 Tomcat 测试了下,还是与网络上有些不同的。修改 Apache 配置1、修改 httpd.conf我的 Apache 安装在 D:Program FilesApache Software FoundationApache2.2,找到 conf 目录下的 httpd.conf,在文件的最后一行添加include “D:Program FilesApache Software FoundationApache2.2confmod_jk.conf“2、新建 mod_jk.conf 文件,内容如下:LoadModule jk_module modules/mod_jk-1.

2、2.31-httpd-2.2.3.soJkWorkersFile conf/workers.properties#指定那些请求交给 tomcat 处理,“controller“ 为在 workers.propertise 里指定的负载分配控制器名JkMount /*.jsp controller3、将下载的 JK 插件 mod_jk-1.2.31-httpd-2.2.3.so 复制到 Apache 安装目录的modules 目录下。4、新建并编辑 workers.properties 文件,内容如下:#server worker.list = controller #=tomcat1= wor

3、ker.tomcat1.port=11009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #=tomcat2= worker.tomcat2.port=12009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #=tomcat3= worker.tomcat3.port=13009 worker.tomcat3.host=192.168.0.80 /在

4、我的虚拟机中的,可以算远程的吧worker.tomcat3.type=ajp13 worker.tomcat3.lbfactor = 1 #=controller,负载均衡控制器= worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3 worker.controller.sticky_session=falseworker.controller.sticky_session_force=1#worker.controller.sticky_session=1 这里可以配置任意多个

5、 Tomcat,此处配置了3个 Tomat 服务器,2个本地,1个远程,所以为了它们都能够顺利启动起来,本地的服务器端口都是不同的,如果 Tomcat 不再同一机器上,没必要改端口的。配置 Tomcat配置3个 Tomcat 服务器,将 Tomcat 解压后复制3份,我将每个文件夹分别命名为Tomcat1,Tomcat2和 Tomcat3,修改每一份的 server.xml 配置,将 Tomcat1中修改部分如下图:Tomcat2中以上部分的 server.xml 为:Tomcat3中以上部分的 server.xml 为:因为 Tomat3在远程服务器,所以没必要改端口的,而我先进行的本地集群

6、测试后将Tomcat3复制到远程服务器,所以这3个 Tomcat 端口都不同。AJP13的 connector 的 poat 和 jvmRoute 名称和 workers.properties 中配置对应。由于截图面积有限,还需要保证本地2个本地 Tomcat 配置 server 的port,connector 为 http1.1的 port 都不相同。测试建立测试项目建立 test 项目,需要在项目的 web.xml 中添加建立 test2.jsp,内容如下(网上都用这个测试,我就省的麻烦了):Cluster App TestServer Info:“);%ID “ + session.ge

7、tId()+“);/ 如果有新的 Session 属性设置String dataName = request.getParameter(“dataName“);if (dataName != null session.setAttribute(dataName, dataValue);out.println(“Session 列表“);System.out.println(“=“);Enumeration e = session.getAttributeNames();while (e.hasMoreElements() String name = (String)e.nextElement(

8、);String value = session.getAttribute(name).toString();out.println( name + “ = “ + value+“);System.out.println( name + “ = “ + value);%名称:值:上面的测试页面就不解释了,很好理解。Session 测试将项目部署到3个服务器,然后分别启动 Apache 和3个 Tocmat 服务器,这些Tomcat 启动顺序随意,然后打开 http:/localhost/test/test2.jsp,结果如下图:F5刷新页面,分别出现:多次刷新页面的 sessionID 看是同

9、一个 ID,说明 session 是复制成功了。那么 session 中的存储的东西呢,在输入框中分别输入 1、1,2、2,3、3后,显示结果如下图:以上的测试说明,集群中的 session 已经共享,每个集群对于同一访问均有相同的session,而且 session 中存储的变量也复制了。节点插拔测试插拔意思是应该保证当运行的集群中某节点中关闭或者启动时,集群正常工作并且节点能够正常工作。下面描述测试过程了,贴图太占地方了。关闭 Tomcat2,刷新页面,则不断访问 Tocmat1和 Tomcat3,再关闭 Tomcat1后,则只访问一个 Tomcat3,说明节点关闭时运行正常。如果重启 T

10、omcat2,无论怎么刷新,始终访问 Tomcat3,难道 Apache 不能将请求转发给中途启动的 Tomcat2?。 。 。这时利用另外台机器访问页面,发现 Tomcat2正常,然后在刷本地页面,又可以访问 Tomcat2了。从上面可以看出 Apache 的负载均衡时的算法了,对于每个新来的 session,Apache按照节点配置中的 lbfactor 比重选择访问节点,如果某节点 node1不能访问,则寻找下一可访问节点,并且将此 node1就在该访问 session 的访问黑名单中,以后该 session 的访问直接不考虑 node1,即使 node1又可以访问了。而新来的 sess

11、ion 是无黑名单的,如果新的 session 能够访问到 node1了,则会将 node1在其他所有 session 访问的黑名单删除,这样其他 session 就又能访问 node1节点了。以上只是个人经过测试后的猜想。经过以上测试,说明 Tomcat 集群和负载均衡已经实现了。关于集群我还有些疑问,所以又测试了下,直接把结论写出来:1.集群下的相同的应用可以名称不同(好像没必要啊),只要配置 server.xml 中 host 下的context 具有相同的 path 即可。2. 如果应用名称可以不同,那么应用下内容是否可以不同呢 (这里考虑将不同应用通过集群看起来是一个应用,并且共享

12、session),然后集群下不同应用映射为相同的访问 path,具有相同的路径则负载,如果某路径只某个应用具有,则一直访问该应用。可现实很骨干啊,答案是否定的,至少我以上的配置不能实现。如果访问只有某应用具有的特别路径,那么只有负载到该应用才可以访问,否则直接路径未找到的错误页面了。如果您看过网上其他 Apache+Tomcat 的集群配置,您可能有的疑问?1.网上大部分的文章配置2个 tocmat 的集群,有的将 workers.properties 下的worker.controller.sticky_session=1,然后 tomcat1中的 server.xml 中的 jvmRout

13、e 设置为 tomcat2,将 tomcat2中的 jvmRoute 设置为 tocmat1,当然我这样设置也成功了,但是如果3个或者更多 tocmat 呢,怎么设置每个 tomcat 的 jvmRoute,我不会所以才考虑现在的配置2.server.xml 中的 Cluster 配置问题,网上大部分都是使用 BackupManager 方式,即 Cluster下又粘贴了一堆配置。其实只要将其中注释掉的去掉注释就完成 session 的集群复制了。只是这俩种复制采用的方式不同而已。http:/tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

14、,这页面已经说的挺清楚了,集群的 session 复制默认是 DeltaManager,是 all to all 的复制,意思是将集群下1个 tomcat 应用下的 session对所有的集群中的节点进行复制,即使那个节点没有发布应用。显然是不好的方式,但这在小规模的集群下并没神马问题。而采用 BackupManager,就是众多网上配置那样,对于需要复制的节点设置BackupManager 自然也没问题,但是它的性能并没有 DeltaManager 好使“ Downside of the BackupManager: not quite as battle tested as the del

15、ta manager”。因此,具体怎么设置就看大家了,通常说如果不是大规模集群,就默认就好了。反正我自己翻译的就是这个意思了,希望没有误导大家。#=controller,负载均衡控制器=worker.controller.type=lbworker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的 tomcatworker.controller.sticky_session=1worker.controller.sticky_session_force=0worker.retries=3worker.status.type=status

16、这是用来监控 JK 本身的模块/*以下是我测试的结果,因为不理解下面这个是什么意思sticky_session sticky_session_force 含义true false SESSION 会复制,有粘性true true SESSION 不复制,有粘性false false SESSION 会复制,无粘性false true SESSION 会复制,无粘性1 :true ;0:falseworker.controller.sticky_session=1worker.controller.sticky_session_force=0一次请求中 session 只会在一个 tomcat

17、上,当该 tomcat 奔溃后,请求会跳转到其他 tomcat上,但是其 session 不会复制到跳转后的 tomcat 上worker.controller.sticky_session=0worker.controller.sticky_session_force=0每次请求都会跳转到其他 tomcat 上, (如果有 AB 两个 tomcat 负载均衡值都为 1,第一次请求 A session 为 A1,第二次请求跳转到 B session B2,第三次又回到 A session 为 A1 和 A3,第四次跳转到 B session 为 B2 和 B4worker.controller

18、.sticky_session=1worker.controller.sticky_session_force=1一次请求中 session 只会在一个 tomcat 上,当该 tomcat 奔溃后,服务端会返回 Service Temporarily Unavailable:The server istemporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.worker.controller.sticky_session=0worker.controller.sticky_session_force=1每次请求都会跳转到其他 tomcat 上, (如果有 AB 两个 tomcat 负载均衡值都为 1,第一次请求 A session 为 A1,第二次请求跳转到 B session B2,第三次又回到 A session 为 A3,第四次跳转到 B session B4,即每次跳转都不会带上 session,也不会保留原有的 session*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报