tomcat+apach load balance

本文主要参考自http://www.iteye.com/topic/985404?dhcc,经由实际操作配置操并记录而成。

一、环境和版本
环境:主机----Windows7(本地localhost);
版本:JDK----1.5.0_22(安装版); Tomcat39----6.0.39(安装版);Tomcat32----6.0.32(安装版)Apache----2.2.25(httpd-2.2.25-win32-x86-no_ssl.msi,安装版)
二、apache tomcat配置操作
1、Apache----2.2.25版本已经集成了mod_jk功能,故不必配置繁琐的worker.properties文件什么的,配置过程很方便了。
2、利用编辑器打开APACHE_HOME\conf\httpd.conf文件,找到如下代理块(proxy):
#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_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
3、去掉这些代理块的注释“#”符号,Apache在启动的过程中将加载上述代理(proxy)。
4、文件结束处添加如下代码:
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1
BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2
</proxy>
5、找到#Include conf/extra/httpd-vhosts.conf位置,并去掉“#”符号。
6、利用编辑器打开APACHE_HOME\conf\extra\httpd-vhosts.conf文件,配置虚拟站点,在文件结束添加
<VirtualHost *:80>
ServerAdmin test@gmail.com
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
ErrorLog "logs/error.log"
CustomLog "logs/access.log" common
</VirtualHost>
7、配置Tomcat----server.xml文件
7.1、如果是2个Tomcat处于不同的机器上,就不需要修改任何端口;只是需要把<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">注释符放开,同时将<Engine name="Catalina" defaultHost="localhost">注释掉;
7.2、对于tomcat在同一部机器的情况,将其中tomcat39的<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">改为<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
7.3 将tomcat39的<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"
redirectPort="8443" />
8005改为9005,8009改为9009,8080改为9080
9009端口对应 Apache httpd.conf中BalancerMember中配置的ajp连接端口。
7.4、将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释放开,目的是可以在集群中的所有tomcat节点间共享会话(Session)。
三、新建测试web project
1、在此引用一个网络上的测试session的例子:
       <%@ 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>

2、myeclipse new 一个web project 在WebRoot下面新建一个test.jsp,内容为上面的代码,在WebRoot\WEB-INF\web.xml 的<web-app>节点下加入<distributable />通知Tomcat在当前应用集群中的所有节点间实现Session共享。
3、在两个TOMCAT_HOME\conf\server.xml的<Host></Host>之间添加<Context path="/test" docBase="D:\workspace\testLoadBlance\WebRoot" reloadable="true" debug="0"></Context>
四、测试load balance
1、启动tomcat39,tomcat32,apache,在浏览器中输入http://localhost/test/test.jsp,每刷新一次apache都会将请求发送到不同的tomcat中。
2、通过在jvm1中提交名称和值后刷新到jvm2可以看到jvm1提交的值,反之亦然,说明load balance并且共享session目的达到。
五、存在的问题
1、用tomcat7时session无法共享。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值