(Apache2.2+Tomcat7.0.12)mod_proxy_balancer方式实现均衡负载

配置 tomcat:
我是在本机测试将tomcat压缩包解压两份,如图
(Apache2.2+Tomcat7.0.12)mod_proxy_balancer方式实现均衡负载 - chy2z - 黑暗行动
为了在同一台电脑上能同时启动多个tomcat服务器,需要给tomcat配置不同的端口。
将其中一个tomcat的conf/server.xm修改如下:
<Server port="9005" shutdown="SHUTDOWN">  <!-- 此处修改为9005,避免与默认的8005冲突 -->
<Connector port="8081" protocol="HTTP/1.1"       <!--  此处修改成8005,避免与默认的8080冲突 -->
               connectionTimeout="20000" 
               redirectPort="8443" />
 <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />    <!--  此处修改成9009,避免与默认的8009冲突  -->

在2个 tomcat中 conf/server.xm修改如下:

<Engine name="Catalina" defaultHost="localhost">  <!--  jvmRoute并不需要配置,因为通过端口就可以区分 -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> <!-- 将注释去掉,实现复制session -->

网站配置:

新建网站项目 loadBalancing

编写index.jsp页面代码

<%@ page contentType="text/html; charset=utf-8" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>

<%

  out.println("<br> ID " + session.getId()+"<br>");

  // 如果有新的 Session 属性设置

  String dataName = request.getParameter("dataName");

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

     String dataValue = request.getParameter("dataValue");

     session.setAttribute(dataName, dataValue);

  }

  out.println("<b>Session 列表</b><br>");

  System.out.println("============================");

  Enumeration e = session.getAttributeNames();

  while (e.hasMoreElements()) {

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

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

     out.println( name + " = " + value+"<br>");

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

   }

%>

  <form action="index.jsp" method="POST">

    名称:<input type=text size=20 name="dataName">

     <br>

    值:<input type=text size=20 name="dataValue">

     <br>

    <input type=submit>

   </form>

</body>

</html>

web.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <distributable/> <!-- 实现session 复制 -->
</web-app>

发布项目

将项目发布到2个tomcat中。

Apache配置: (默认端口是80,会和iis冲突 )
1 修改Apache2.2\conf\httpd.conf文件配置,在文件中将  LoadModule 前的注释符号"#"去掉
# ====================================
LoadModule proxy_module modules/mod_proxy.so
# ====================================
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
# ====================================
LoadModule proxy_connect_module modules/mod_proxy_connect.so
# ====================================
LoadModule proxy_http_module modules/mod_proxy_http.so
# ====================================
2 修改Apache2.2\conf\httpd.conf文件配置在文件尾部追加
# ===============================
ProxyPass / balancer://proxy/ lbmethod=bytraffic
<Proxy balancer://proxy>   
 BalancerMember http://localhost:8080/ loadfactor=1 
 BalancerMember http://localhost:8081/ loadfactor=2
</Proxy>
# ===============================
说明:
#BalancerMember 后面的URL表示要配置的后台服务
#参数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1

1)轮询均衡策略的配置 ProxyPass / balancer://proxy/ <Proxy balancer://proxy> BalancerMember http://127.0.0.1:8080/ BalancerMember http://127.0.0.1:8081/ </Proxy> 实现负载均衡的原理如下: 假设Apache接收到http://localhost/test请求,由于该请求满足ProxyPass条件(其URL前缀为“/"),该请求会 被分发到后台某一个BalancerMember,譬如,该请求可能会转发到http://127.0.0.1:8080/进行处理?当第二 个满足条件的URL请求过来时,该请求可能会被分发到另外一台BalancerMember,譬如,可能会转发到 http://127.0.0.1:8081/如此循环反复,便实现了负载均衡的机制? 2)按权重分配均衡策略的配置 ProxyPass / balancer://proxy/ <Proxy balancer://proxy> BalancerMember http://127.0.0.1:8080/ loadfactor=3 BalancerMember http://127.0.0.1:8081/ loadfactor=1 </Proxy> 参数"loadfactor"表示后台服务器负载到由Apache发送请 求的权值,该值默认为1,可以将该值设置为1到100之间的任何值?以上面 的配置为例,介绍如何实现按权重分配的负载均衡,现假设Apache收到4次http://localhost/loadBalancing/index.jsp 请求,该请求分别被负载到后台 服务器,则有3次连续的这样请求被负载到BalancerMember为http://127.0.0.1:8080/的服务器,有1次这样的请求被 负载BalancerMember为http://127.0.0.1:8081/后台服务器?实现了按照权重连续分配的均衡策略?
3)权重请求响应负载均衡策略的配置 ProxyPass / balancer://proxy/ lbmethod=bytraffic <Proxy balancer://proxy> BalancerMember http://127.0.0.1:8080/ loadfactor=3 BalancerMember http://127.0.0.1:8081/ loadfactor=1 </Proxy> 参数“lbmethod=bytraffic"表示后台服务器负载请求和 响应的字节数,处理字节数的多少是以权值的方式来表示的? “loadfactor"表示后台服务器处理负载请求和响应字节数的权值,该值默认为1,可以将该值设置在1到100的任何值?根据以上配置是这么进行均 衡负载的,假设Apache接收到http://localhost/loadBalancing/index.jsp请求,将请求转发给后台服务器,如果BalancerMember为http://127.0.0.1:8080/后台服务器负载到这个请求,那么它处理请求和响应的字节数是BalancerMember为http://127.0.0.1:8081/服务器的3倍。也就是说(2)是以请求数作为权重负载均衡的,(3)是以流量为权重负载均衡的,这是最大的区别!

将以上配置完毕,运行apach,tomcat.在360浏览器和ie9浏览器中分别输入:
http://localhost/loadBalancing/index.jsp。(提交后,在刷新其他页面)
(Apache2.2+Tomcat7.0.12)mod_proxy_balancer方式实现均衡负载 - chy2z - 黑暗行动
可以看到ie和360浏览器中的session不同,360浏览器共用一个session,ie9浏览器 共用一个session.
 
(Apache2.2+Tomcat7.0.12)mod_proxy_balancer方式实现均衡负载 - chy2z - 黑暗行动
 
在不同的tomcat中看到session复制效果。

在测试中发现:一定要先启动apach在启动tomcat不然测试结果肯定不对,会发现session会非常乱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值