• Apache和Tomcat 配置负载均衡(mod-proxy方式)-无session共享、无粘性session


    转:https://blog.csdn.net/wangjunjun2008/article/details/38268483

    mod-proxy方式实现负载均衡是利用了Apache 2.x版本自带的mod_proxy模块使用代理技术来连接Tomcat;

    http_proxy模式基于HTTP协议,要求Tomcat提供HTTP服务,也就是必须启用TomcatHTTP Connector;

    ajp_proxy模式基于AJP协议,要求Tomcat提供AJP服务,也就是必须启用Tomcat的AJP Connector;

     

    Apache2.2版本之后对mod-proxy模块进行了重写,增强了其功能和稳定性.配置简单,使用广泛.

    网上也有大量的相关文章.其具体包括http-proxy,ajp-proxy,ftp-proxy等方式.

     

    采用mod-proxy的连接方式,Apache需要加载以下模块:

     

    LoadModule proxy_module modules/mod_proxy.so

    LoadModule proxy_connect_module modules/mod_proxy_connect.so

    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

    LoadModule proxy_http_module modules/mod_proxy_http.so

    LoadModule manager_module modules/mod_manager.so

    下面介绍http-proxy,ajp-proxy两种最常用的方式.

    一、准备工作

    1) 软件准备

    Apache 2.2.25http://httpd.apache.org/download.cgi

     

    Tomcat 6.0.39http://tomcat.apache.org/download-60.cgi

     

    2) 软件安装

    Windows下安装Apache,并测试服务器正常工作;

    Linux下安装 Apache 可参考: http://blog.csdn.net/wangjunjun2008/article/details/38314387;

    Tomcat解压缩,分别命名为tomcat1tomcat2;并启动tomcat测试其正常工作。

     

    二、全局配置

     

    1) 编辑${HTTPD_HOME}/conf/httpd.conf文件,开启以下模块,以便让Apache启动时自动加载:

    LoadModule proxy_module modules/mod_proxy.so

    LoadModule proxy_connect_module modules/mod_proxy_connect.so

    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

    LoadModule proxy_http_module modules/mod_proxy_http.so

    LoadModule manager_module modules/mod_manager.so

    2) 编辑${HTTPD_HOME}/conf/httpd.conf文件,找到<IfModule dir_module>,在DirectoryIndex index.html 后加上 index.jsp; 

    这一步只是为了配置完tomcat后能看到小猫首页,可以不做。

    3) 分别修改tomcat1和tomcat2的server.xml文件,修改如下标签的端口及,并添加jvmRoute属性:

    tomcat1修改后的内容:

     

    <Server port="8010" shutdown="SHUTDOWN">

    <Connector port="8080" protocol="HTTP/1.1" ... redirectPort="8443" />

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

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

     

    tomcat2修改后的内容:

    <Server port="8011" shutdown="SHUTDOWN">

    <Connector port="8081" protocol="HTTP/1.1" ... redirectPort="8443" />

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

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

    三、负载均衡配置

    对于http_proxy方式,配置如下:

    ProxyPass / balancer://httpproxy/

    <Proxy balancer://httpproxy/>

      BalancerMember http://127.0.0.1:8080/

      BalancerMember http://127.0.0.1:8081/

    </Proxy>

    #配置负载均衡管理界面;访问地址为 http://localhost/balancer-manager/

    <Location /balancer-manager>

      SetHandler balancer-manager

      order Allow,Deny

      #Deny from All

      Allow from 127.0.0.1

    </Location>

    【说明】

    "httpproxy"是集群名称(可为任意名称)

    8080,8081分别对应tomcat的http协议端口;

    如此,即可实现apache和tomcat基于http_proxy方式的负载均衡.

    访问 http://localhost/balancer-manager 打开如下页面,

    对于ajp_proxy方式,配置如下:

    ProxyPass / balancer://ajpproxy/

    <Proxy balancer://ajpproxy/>

      BalancerMember ajp://127.0.0.1:8090/

      BalancerMember ajp://127.0.0.1:8091/

    </Proxy>

    【说明】 8090,8091分别对应tomcat的ajp协议端口;

    如此,即可实现apache和tomcat基于ajp_proxy方式的负载均衡.

    访问 http://localhost/balancer-manager 打开如下页面,

     

    如需具体控制负载均衡中各个节点的负载比例,则将以上配置作如下修改:

    ProxyPass / balancer://ajpproxy/

    <Proxy balancer://ajpproxy/>

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

      BalancerMember ajp://127.0.0.1:8091/ loadfactor=2 route=tomcat2

    </Proxy>

    [说明]

    loadfactor 是负载因子(取值范围是1~100),Apache会按照指定数字的比例分发请求(数值越大,处理的请求越多);

    比如,两个tomcat的数字都是1,则按1:1的比例分发请求;若是2和1,则按2:1的比例分发请求;

    "route=tomcat1" 是负载均衡的节点名称(可为任意名称,但不可重复);

    四、添加测试代码

    分别在tomcat1和tomcat2添加如下代码:

     

    ${Tomcat_Home}/webapps/下新建test目录,test目录下新建test.jsp文件,文件内容为:

    <%@ page contentType="text/html; charset=GBK" %>
    <%@ page import="java.util.*" %>
    <html>
    <head>
    </head>
    <body>
    <%
        out.println("Server IP = " + request.getLocalAddr() + "<br>");
        out.println("Server Port = " + request.getLocalPort() + "<br>");
        out.println("<br>");
        out.println("SessionId = " + session.getId() + "<br>");
        out.println("<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>

     

    五、进行负载均衡测试

     

    启动Apache和tomcat1,tomcat2,访问http://localhost/test/test.jsp,

    可以看到包括服务器地址端口SessionId等信息在内的页面,如下图:

    [说明]

    此处的SessionId多了”.tomcat0”,说明处理当前请求的服务器是节点为tomcat0的Tomcat;

     

    如果需要向集群中增加节点,首先需要对新增的Tomcat作类似配置,然后修改${Apache_Home}/conf/httpd.conf 文件,增加BalancerMember,指向新增的tomcat即可。

     

  • 相关阅读:
    pdflush的工作原理
    proc/sys/net/ipv4/下各项的意义
    Linux系统调用--getrlimit()与setrlimit()函数详解
    定位多线程内存越界问题实践总结
    Linux动态频率调节系统CPUFreq之三:governor
    Linux动态频率调节系统CPUFreq之二:核心(core)架构与API
    Linux动态频率调节系统CPUFreq之一:概述
    ubuntu cpu频率控制
    ThinkPHP5.1的数据库链接和增删改查
    php 常用的常量
  • 原文地址:https://www.cnblogs.com/jiangtao1218/p/10111095.html
Copyright © 2020-2023  润新知