虚幻0516 发表于 2017-1-22 06:28:15

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无法共享。
页: [1]
查看完整版本: tomcat+apach load balance