Apache+modproxy布置tomcat集群

一、环境:

Apache: 2.2.14;

  下载地址:http://archive.apache.org/dist/httpd/binaries/win32/

Tomcat: 7.0.82

JDK1.7

Win7 64位系统

二、Apache设置:

1、修改httpd.conf文件:

LoadModule proxy_module modules/mod_proxy.so

LoadModule negotiation_module modules/mod_negotiation.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

 

此段代码前面的注释放开。

注意:需要确保这些so文件在modules文件夹下存在,如果没有则需要到网上下载后并放到modules目录下;

 

2、将下面这段代码放开注释:

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

 

3、文件末尾加入代码:

ProxyRequests On

   <proxy balancer://cluster>  

       BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=tomcat1 

       BalancerMember ajp://127.0.0.1:8109 loadfactor=1 route=tomcat2 

   </proxy>

 

4、在conf/extra/httpd-vhosts.conf中添加代码:

<VirtualHost *:80>   // 对应httpd.conf  服务器端口号

    ServerAdmin test@163.com

    ServerName 127.0.0.1 

    ServerAlias localhost  

    ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On

    ProxyPassReverse / balancer://cluster/

    ErrorLog "logs/proxyTest-error.log"

    CustomLog "logs/lbtest-access.log" common

</VirtualHost>

 

ServerAdmin参数对应httpd.conf文件中的ServerAdmin参数内容;

 

5、启动apache,如果启动不了可以使用命令行启动httpd.exe文件,通过查看报错信息来解决;

 

三、Tomcat设置:

1、 如果两个tomcat实例是运行在一台机器上,需要修改对应的端口,如果是在两台机器上,则可以不用修改端口;需要修改的端口号如下:

2、增加jvmRoute参数:

 

3、放开Cluster参数:

 

4、分别启动tomcat1和tomcat2;

四、测试:

新建一个测试的web工程,在web.xml文件中增加一行:

    <distributable/>

建立测试页面文件index.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>"); 

        // 如果有新的 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); 

        } 

    %>

</body>

</html> 

 

启动Apache,在浏览器中打开:http://localhost:80/test/index.jsp,可以看到Apache会把请求负载到tomcat1和tomcat2上,但是session一直没有改变,说明session在两个tomcat之间进行了同步;

posted on 2017-11-29 12:12  小夏coding  阅读(148)  评论(0编辑  收藏  举报

导航