apache2.2+tomcat6.0.18配置负载均衡

<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->

1) 下载 apache httpdapache tomcat ,并安装

2) 配置 apache

修改conf/httpd.conf 文件

去掉以下文本前的注释符# ,以便让 Apache 在启动时自动加载

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 proxy_http_module modules/mod_proxy_http.so

 

找到 Include conf/extra/httpd-vhosts.conf 并去掉前面的 #

 

打开conf/extra/httpd-vhosts.conf ,并添加以下内容

ProxyRequests Off

<proxy balancer://capaacluster>

    BalancerMember http://127.0.0.1:8080 loadfactor=1 route=jvm1

    BalancerMember http://127.0.0.1:9080 loadfactor=1 route=jvm2

ProxySet stickysession=JSESSIONID

ProxySet lbmethod=bybusyness/byrequests/ bytraffic

</proxy>

 

<VirtualHost *:80>

    ServerAdmin webmaster@dummy-host.capaa.com

    ServerName 172.16.5.22

    ServerAlias www.dummy-host.capaa.com

    ProxyPass / balancer://capaacluster/

    ProxyPassReverse / balancer://capaacluster/

    ErrorLog "logs/172.16.5.22-error.log"

#    CustomLog "logs/172.16.5.22-access.log" common

    CustomLog "logs/172.16.5.22-access.log" "%{JSESSIONID}C %{BALANCER_SESSION_STICKY}e %{BALANCER_SESSION_ROUTE}e %{BALANCER_WORKER_ROUTE}e %{BALANCER_ROUTE_CHANGED}e %{Set-Cookie}o"

</VirtualHost>

 

保存,apache 配置完毕。并重启 apache

 

3) 配置 tomcat

解压tomcat ,并复制一份,分别称为 t1, 2

分别修改tomcat1tomcat2server.xml ,使其监听的端口不冲突

 

找到<Server port="8005" shutdown="SHUTDOWN">t1 不变,把 t2 改为 9005

 

配置Connector 的端口,找到 non-SSL HTTP/1.1 Connector ,即 tomcat 单独工作时的默认 Connector ,保留 t1 默认配置,在 8080 端口侦听,

而把t2 设置为在 9080 端口侦听

 

AJP 1.3 Connector, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

这是tomcat 接收从 Apache 过来的 ajp 连接请求时使用的端口,保留 t1 默认设置,把 t2 端口改为 9009

找到<Engine name="Catalina" defaultHost="localhost"> ,去掉这段或改为注释,把上方紧挨的 <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> 注释符去掉,对于 t2 ,去掉注释符并把 jvm1 改为 jvm2 。这里的 jvmRoute 对应 Apache httpd.confBalancerMember 中配置的 route 参数

找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> ,打开注释,这里的配置是为了可以在集群中的所有 tomcat 节点间共享会话( Session

 

4) 测试 app

分别在t1t2webapp 目录下新增一个 test app ,并新增一个 test.jsp

<%@ page contentType="text/html; charset=GBK" %>

<%@ 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>"); 

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

  

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

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

     session.setAttribute(dataName, dataValue);

  }  

  

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

  

  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="test.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>

 

修改此test appweb.xml 文件,在 <web-app> 节点下加入 <distributable />

 

访问http://172.16.5.22/test/test.jsp  页面会显示相应的信息,是哪个 tomcat 处理了请求,当前 session 中的数据等

 

--------jessionid无效的问题

关键字: java apache load balance

这是 apache 部分的配置

 

<Proxy balancer://proxy>
       BalancerMember ajp://127.0.0.1:8009/  loadfactor=1 route=tomcat1
       BalancerMember ajp://127.0.0.1:8010/  loadfactor=1 route=tomcat2
</Proxy>

 <VirtualHost   *:80>
 ServerName  www.a.com
 ServerAlias    www.a.com
 ProxyPass / balancer://proxy/ stickysession=JSESSIONID nofailover=On lbmethod=bytraffic
        ProxyPassReverse / balancer://proxy/

  </VirtualHost> 

 

Server.xml分别是

 

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

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

 

我在两个的ROOT 文件夹下都放一个  test.jsp  分别输出不同的标识 .

但刷新的时候, 就会发现 apache 把请求分别发给  tomcat1 tomcat2. stickysession 失败了 . . 这是为什么呢 ???  哪位帮忙看看 ...

 

===========================================

以下为正确配置

 

 <VirtualHost   *:80>
 
 ServerName  www.a.com
 ServerAlias    www.a.com
 ProxyPass / balancer://proxy/ stickysession=JSESSIONID
 ProxyPassReverse / balancer://proxy/

 <Proxy balancer://proxy>
        BalancerMember  http://192.168.1.192:8080/   loadfactor=1 route=tomcat1
        BalancerMember  http://192.168.1.192:8081/   loadfactor=2 route=tomcat2
 </Proxy>

 </VirtualHost> 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值