Apache负载均衡与Tomcat集群配置学习(Windows环境)

本文详细描述了如何在Apache配置中实现负载均衡,包括使用balancer、ProxyRequestsOff和AJP与Tomcat的交互,以及遇到的错误和解决方案。同时提及了Java工程师的学习资源分享。
摘要由CSDN通过智能技术生成

ErrorLog “logs/lbtest-error.log”

CustomLog “logs/lbtest-access.log” common

本人的配置实例:

<VirtualHost *:80>

ServerAdmin limingzhong1985@gmail.com

ServerName 10.10.141.40                   ServerAlias localhost

ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On

ProxyPassReverse / balancer://cluster/

ErrorLog “log/error.log”

CustomLog “log/access.log” common

注:1、balancer://是告诉Apache需要进行负载均衡的代理;

2、后面的cluster是集群名,可以随意取;

3、两个日志引擎ErrorLog负责记 录错误,CustomLog负责记录所有的http访问以及返回状态,日志名可以自己取。

6、再次打开D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf,文件结束处添加如下代码:

ProxyRequests Off

<proxy balancer://cluster>

BalancerMember ajp://10.10.141.39:8009 loadfactor=1 route=jvm1

BalancerMember ajp://10.10.141.40:8009 loadfactor=1 route=jvm2

注:1、ProxyRequests Off 是告诉Apache需要使用反向代理;

2、<proxy balancer://cluster>用于配置工作在集群中的节点列表,这里的“cluster”必须与上面的集群名保持一致;

3、Apache通过ajp协议与tomcat进行通信,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口;

4、loadfactor是负载因 子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都 是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发;

5、route参数对应后续tomcat配置中的引擎路径 (jvmRoute)。

7、重新启动Apache服务,在浏览器中访问:http:10.10.141.40,你会发现得到了一个503的错误,内容如下:

Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime orcapacityproblems. Please try again later

打开刚刚配置的错误文件,我们会发现如下信息:

[Mon Jun 18 17:59:16 2012] [error] (OS 10061)由于目标机器积极拒绝,无法连接。  : proxy: AJP: attempt to connect to 10.10.141.40:8009 (10.10.141.40) failed

[Mon Jun 18 17:59:16 2012] [error] ap_proxy_connect_backend disabling worker for (10.10.141.40)

[Mon Jun 18 17:59:16 2012] [error] proxy: AJP: failed to make connection to backend: 10.10.141.40

[Mon Jun 18 17:59:23 2012] [error] (OS 10060)由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

: proxy: AJP: attempt to connect  to 10.10.141.39:8009 (10.10.141.39) failed

[Mon Jun 18 17:59:23 2012] [error] ap_proxy_connect_backend disabling worker for (10.10.141.39)

[Mon Jun 18 17:59:23 2012] [error] proxy: AJP: failed to make connection to backend: 10.10.141.39

从上面的信息我们可以知道:连接 10.10.141.40 和 10.10.141.39 两台服务器失败,原因是还没有启动Tomcat造成的。

8、配置Tomcat----server.xml文件

8.1、如果是2个Tomcat处于不同的机器上,就不需要修改任何端口;只是需要把注释符放开,同时将注释掉;

8.2、对于10.10.141.40的机器,将改为,怎么知道要改成这样呢,看下面的配置:

ProxyRequests Off

<proxy balancer://cluster>

BalancerMember ajp://10.10.141.39:8009 loadfactor=1 route=jvm1

BalancerMember ajp://10.10.141.40:8009 loadfactor=1 route=jvm2

在我的配置中,10.10.141.40对应的是:route=jvm2 ;

注:jvmRoute对应Apache httpd.conf中BalancerMember中配置的route参数。        8.3、对于Tomcat安装在同一台机器上的情况,则需要做端口修改工作,同时上面的配置可以修改为如下情形:

ProxyRequests Off

<proxy balancer://cluster>

BalancerMember ajp://localhost:8009loadfactor=1 route=jvm1

BalancerMember ajp://localhost:9009loadfactor=1 route=jvm2

接下来修改<Connector port=“8009” protocol=“AJP/1.3” redirectPort=“8443” />,将jvm2对应的Tomcat配置修改为<Connector port=“9009” protocol=“AJP/1.3” redirectPort=“8443” />。

注:端口对应 Apache httpd.conf中BalancerMember中配置的ajp连接端口。

8.4、将的注释放开,目的是可以在集群中的所有tomcat节点间共享会话(Session)。

8.5、配置Connector的端口,把jvm2设置为在9080端口侦听,保证2个Tomcat的监听端口的不同。

8.6、server.xml文件配置完毕后,我们放入一个简单的java项目应用测试,两个目的:

a:测试session信息是否丢失,即同一个请求在不同刷新过程中是否改变,如果改变则配置失败,反之配置成功;

b:测试session是否在集群中的各个节点中成功复制,复制成功则才能实现集群的目的:负载均衡;                 在此引用一个网络上的测试session的例子:

在每个Tomcat的webapps目录下新建test目录,在test目录下新建test.jsp文件,代码如下:

[java]  view plain copy print ? 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. <%@ page contentType=“text/html; charset=GBK” %>

  2. <%@ page import=“java.util.*” %>

  3. Cluster App Test

  4. Server Info:

  5. <%

  6. out.println(request.getLocalAddr() + " : " + request.getLocalPort()+“
    ”);%>

  7. <%

  8. out.println(“
     ID " + session.getId()+”
    ");

  9. String dataName = request.getParameter(“dataName”);

  10. if (dataName != null && dataName.length() > 0) {

  11. String dataValue = request.getParameter(“dataValue”);

  12. session.setAttribute(dataName, dataValue);

  13. }

  14. out.print(“Session 列表”);

  15. Enumeration e = session.getAttributeNames();

  16. while (e.hasMoreElements()) {

  17. String name = (String)e.nextElement();

  18. String value = session.getAttribute(name).toString();

  19. out.println( name + " = " + value+“
    ”);

  20. System.out.println( name + " = " + value);

  21. }

  22. %>

  23. <form action=“test.jsp” method=“POST”>

  24. 名称:<input type=text size=20 name=“dataName”>


  25. 值:<input type=text size=20 name=“dataValue”>


  26.   

8.7、在test目录下新建WEB-INF目录和web.xml,在节点下加入,通知Tomcat在当前应用集群中的所有节点间实现Session共享。

8.8、启动两个Tomcat节点和Apache服务,进行测试,在浏览器中输入:http://10.10.141.40/test/test.jsp

测试结果:

1、ID A13F7FD30C2ACA712BDF6EFAF9B7FD38.jvm2

Session 列表1 = 1

2、ID A13F7FD30C2ACA712BDF6EFAF9B7FD38.jvm1

Session 列表1 = 1

3、ID A13F7FD30C2ACA712BDF6EFAF9B7FD38.jvm2

Session 列表1 = 1

2 = 3

4、ID A13F7FD30C2ACA712BDF6EFAF9B7FD38.jvm1

Session 列表1 = 1

3 = 4

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
]

[外链图片转存中…(img-mlt9VQhJ-1714722073269)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值