Windows环境下配置Apache2.4+Tomcat7的负载均衡配置

准备工作

Windows Server 2008 R2 Enterprise(2.40GH,8GB,64Bit,192.168.10.212)
2台Ubuntu 10.04.4(192.168.10.98,192.168.10.137)
JDK1.7.80
Tomcat7.0.68
Apache2.4.4

*解释一下:在Windows上安装Apache,在Ubuntu上安装Tomcat。首先,对于平台的选择,我是觉得那个方便就那个,当然,如果涉及到性能的问题的话,我就不清楚了,各位有自己的见解的欢迎留言*

1.安装Apache2.4.4,安装过程中没什么注意事项,一直Next就行了。安装完成后默认开启Apache服务,可以在浏览器上输入localhost或者127.0.0.1,这时候会出现It works的字样
2.Java环境在Ubuntu上的配置网上很多我就不多讲了,但是记得配置JAVA_HOME和PATH
3.Tomcat的话就直接解压在目录中就像了,我的目录在/opt/tomcat7/,在两台Ubuntu上都解压。可能会遇到权限不足的问题,这时候就要敲命令啦,最简单粗暴的,莫过于sudo chmod 777 目录,鉴于安全问题,各位还是妥善地进行授权,这就不提了。

开始配置

Apache的配置
1.首先打开一些必要的Module注释(把前面的#号去掉就行),在conf/httpd这个文件中

  • 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 slotmem_shm_module modules/mod_slotmem_shm.so
  • LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

这里我提一下最后两个个,我当时只打开了前面几个,结果Apache一直启动不起来,看了看日志发现一直在报Failed to lookup provider ‘shm’ for ‘slotmem’: is mod_slotmem_shm loaded??这个错误,我看了看才发现原来没有打开这个Module,去掉#号就不会报这个错误了;另外一个是因为报了(22)Invalid argument: AH01183: Cannot share balancer这个错误,打开这个Module之后就不会报错啦。

2.在conf/httpd文件中打开Virtual hosts的注释
在Include前去掉#号

3.在conf/extra/httpd-vhosts.conf中添加配置
先把我自己的配置贴出来

<VirtualHost *:80>
    ServerAdmin 502053382@qq.com
    ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
    ProxyPassReverse / balancer://cluster/
    ServerName 192.168.10.212
    ErrorLog "logs/error.log"
    CustomLog "logs/access.log" common
</VirtualHost>
ProxyRequests Off
<proxy balancer://cluster>
    BalancerMember ajp://192.168.10.98:8009 loadfactor=1 route=jvm1 smax=5 max=20 ttl=120 retry=300 timeout=15
    BalancerMember ajp://192.168.10.137:8009 loadfactor=1 route=jvm2 smax=5 max=20 ttl=120 retry=300 timeout=15
</proxy>
  • ProxyPass :将远程服务器映射到本地服务器的URL空间
  • balancer:// :代理的指令类型
  • stickysession : 均衡器粘连会话名称。该值常常会被设置为类似JSESSIONID或者 PHPSESSIONID之类的值,他依赖于支持会话的后端应用服务器。如 果后端服务器使用不同的cookie名称或者URL编码的ID(像servlet 容器),使用|来分开他们。第一个部分针对cookie,第二个针对路径。
  • nofailover : 如果设为‘On’,当工作单元被禁用或者出错时,会话则立即中断。可以将 该值设为On如果后端服务器不支持会话复制(Session replication)。
  • ProxyRequests : 在使用ProxyPass指令的时候,ProxyRequests指令通常都应该是关闭 的。
  • BalancerMember : 均衡成员
  • loadfactor : 工作单元负载系数。用于BalancerMember。它是一个1到100之间的数 字,用于定义应用于该工作单元的正规化权重负载。
  • route : 工作单元的路由,用于负载均衡器中。该路由是附加给会话ID的一个值。
  • smax : 根据需要最多创建数量为柔性最大值(Soft Maximum),也就是smax的链接。 任何超出smax数量的链接都会指定一个生存时间也就是ttl。
    max : 默认值为当前MPM中每个进程的线程数量。在Prefork MPM中,该值总是为 1,在Worker MPM中,该值受ThreadsPerChild控制。
    ttl : 超出smax连接数的非活动链接的生存时间(Time To Live),单位为秒。Apache 会关闭在这段时间内没有被用过的所有链接。
    retry : 线程池工作单元重试的超时时间,以秒为单位。如果到后端服务器的线程池工 作单元状态是出错,Apache将不会递交任何请求到该服务器,直到超时结束。 这可以令后端服务器关闭进行维护,并稍后上线。如果值为0则表示总是重试 错误状态的工作单元不等待任何时间。
    timeout : 链接超时时间,单位为秒。如果未设置,那么Apache会一直等到有可用的链接 位置。该指令常和max参数一起使用来限制到后端服务器的链接。

这样就差不多配置完了,重启Apache服务就可以了。

注意:当输入localhost或者127.0.0.1的时候已经不会出现It works的字样,而是会报503错误,这是正常的,因为现在Apache已经开起了负载均衡的功能,已经通过AJP导向对象IP上的Tomcat,只是Tomcat还没有启动过。

Tomcat的配置
以192.168.10.98这台服务器为例
使用Vim打开conf下面的server.xml(不会Vim的请自行脑补╮(╯▽╰)╭)。这里介绍的负载均衡,是Apache通过AJP协议与Tomcat进行衔接,所以在Apache中配置的端口号是Tomcat中AJP的端口号。
此外,需要在Engine中配置jvmRoute

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

这里的jvmRoute对应的是Apache中的route。(我刚才把这个去掉不配置,发现竟然也可以,觉得很神奇,但应该是要配置。)

最后还要将

 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

这个注释打开

至此,配置已经完成。同理在192.168.10.137上也这样配置。

编写一个小小的测试用的test.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.*"%>
<html>
    <head>
        <title>ApacheTomcatTest</title>
    </head>
    <body>
        <%
            out.println("<br> SESSION ID:" + session.getId() + "</br>");
        %>
    </body>
</html>

在Tomcat的webapps目录下面创建一个balance文件夹,将test.jsp放在该文件夹下面,启动Tomcat

最后在浏览器中输入192.168.10.212/balance/test.jsp
会发现SESSION ID的值一直在两个数字之间变换

这就是负载均衡的体现了。当然,输入192.168.10.212出现的也不会是It works,而是经典的Tomcat首页。

对了,以上是基于三台服务器的,配置起来方便点,如果是想在自己的笔记本上模拟的话,大家可以参考我的百度文库

http://wenku.baidu.com/view/28f2ab7c960590c69fc376a5

过程差不多,只是要考虑端口冲突的问题。

以上便是我的配置过程,如有错误或者不懂的地方欢迎留言O(∩_∩)O

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
概念: AJP是Apache提供的完成与其它服务器通讯的一种协议。在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_ajp模块。 配置过程: 1 安装apache 2 测试apache是否安装成功:http://localhost 出现It works! 3 解压、安装tocmat 4 测试tocmat是否安装成功:http://localhost:8080 5 配置tocmat的jdk: 打开startup.bat添加: rem ----------------------------------------------------JDK目录 SET JAVA_HOME=D:\progam\jdk160_05 rem ----------------------------------------------------解压后Tomcat的目录 6 复制tocmat,名字为tomcat2 7 apache 整合tomcat 1)modules目录下添加模块:jk mod_jk-1.2.26-httpd-2.2.4.so 2)修改conf/httpd.conf 最后一行添加: include conf/mod_jk.conf 3)在conf目录下创建mok_jk.conf 内容: #加载mod_jk Module LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so #指定 workers.properties文件路径 JkWorkersFile conf/workers.properties #指定哪些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名 JkMount /*.jsp controller 4)在confi目录下创建workers.properties 内容为: worker.list = controller,tomcat1,tomcat2 #========tomcat1======== worker.tomcat1.port=8009 worker.tomcat1.host=192.168.9.210 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #加权因子 越大执行的请求越多 #========tomcat2======== worker.tomcat2.port=9009 worker.tomcat2.host=192.168.9.210 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=1 5 修改tomcat的端口号(3处) <Server port="8005" shutdown="SHUTDOWN"> 改为: <Server port="9005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> 改为: <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> 改为: <Connector port="9009" protocol="AJP/1.3" redirectPort="8443"/> 注意:该处需要与worker.tomcat2.port=9009对应 6 修改jvmRoute 备注与worker.list = controller,tomcat1,tomcat2的tomcat1或tocmat2对应 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值