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

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

http_proxy模式基于HTTP协议,要求Tomcat提供HTTP服务,也就是必须启用Tomcat的HTTP 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.25: http://httpd.apache.org/download.cgi

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

2) 软件安装

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

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

Tomcat解压缩,分别命名为tomcat1和tomcat2;并启动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文件,文件内容为:

  1. <%@ page contentType="text/html; charset=GBK" %>
  2. <%@ page import="java.util.*" %>
  3. <html>
  4. <head>
  5. </head>
  6. <body>
  7. <%
  8. out.println("Server IP = " + request.getLocalAddr() + "<br>");
  9. out.println("Server Port = " + request.getLocalPort() + "<br>");
  10. out.println("<br>");
  11. out.println("SessionId = " + session.getId() + "<br>");
  12. out.println("<br>");
  13.  
  14. String dataName = request.getParameter("dataName");
  15. if (dataName != null && dataName.length() > 0) {
  16. String dataValue = request.getParameter("dataValue");
  17. session.setAttribute(dataName, dataValue);
  18. }
  19.  
  20. out.print("<b>Session 列表</b>");
  21. Enumeration e = session.getAttributeNames();
  22. while (e.hasMoreElements()) {
  23. String name = (String)e.nextElement();
  24. String value = session.getAttribute(name).toString();
  25. out.println( name + " = " + value+"<br>");
  26. System.out.println( name + " = " + value);
  27. }
  28. %>
  29.  
  30. <form action="test.jsp" method="POST">
  31. 名称:<input type=text size=20 name="dataName"><br>
  32. 值:<input type=text size=20 name="dataValue"><br>
  33. <input type=submit>
  34. </form>
  35. </body>
  36. </html>

五、进行负载均衡测试

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

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

[说明]

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

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

Apache和Tomcat 配置负载均衡(mod-proxy方式)-无session共享、无粘性session的更多相关文章

  1. Apache和Tomcat 配置负载均衡(mod-proxy方式)-粘性session

    Tomcat集群配置后端Tomcat Server为支持AJP的独立服务,前端Apache配置为粘性会话(sticky-session),Tomcat不配置Cluster配置和Session复制. 配 ...

  2. apache+tomcat配置负载均衡,实现http与websocket接口分压

    一.应用场景 在生产环境中,应用服务器(此文以tomcat为例)不免面临高访问量的压力,相比而言web服务器(此文以apache为例)能够承担更大的并发量.Apache本身带有一些模块,可以完成对应用 ...

  3. 基于Apache和tomcat实现负载均衡

    1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...

  4. 简单的 Nginx+Tomcat 配置负载均衡集群

    简单 Nginx+Tomcat 配置负载均衡集群 前期准备 解压两个tomcat,修改端口号 server1:8081 server:8082 同时启动 nginx官网下载解压版nginx 创建一个简 ...

  5. Windows下使用Nginx+tomcat配置负载均衡

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口 ...

  6. nginx和tomcat配置负载均衡和session同步

    一.背景 因业务需求,现需配置多台服务器,实现负载均衡. 二.解决方案 使用 nginx + tomcat,在这一台应用服务器部署一个nginx和两个tomcat.通过nginx修改配置后reload ...

  7. 从零开始学 Java - CentOS 下 Nginx + Tomcat 配置负载均衡

    为什么现在有非常多的聪明人都在致力于互联网? 最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做 ...

  8. nginx + tomcat配置负载均衡

    目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...

  9. Nginx+Tomcat 配置负载均衡集群

    一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...

随机推荐

  1. Egret白鹭开发微信小游戏分享功能

    今天给大家分享一下微信分享转发功能,话不多说,直接干 方法一: 1.在egret中打开Platfrom.ts文件,添加代码如下(当然,你也可以直接复制粘贴) /** * 平台数据接口. * 由于每款游 ...

  2. HDU 6044

    题意略. 思路: I.对于整个区间a1,....,an,必然有一个区间[1,n]与之对应,因为a1,...,an是1,...,n的一个排列,所以在[1,n]中定然有一个最小的数字1, 如果最大的区间[ ...

  3. tomcat8 编写字符编码Filter过滤器无效问题

    做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: package com.charles.web.filter; import java.io.IOException; import ...

  4. Redis数据类型的基本操作

    Redis数据类型的基本操作 一.string类型 1.设置value

  5. 知识图谱推理与实践 (2) -- 基于jena实现规则推理

    本章,介绍 基于jena的规则引擎实现推理,并通过两个例子介绍如何coding实现. 规则引擎概述 jena包含了一个通用的规则推理机,可以在RDFS和OWL推理机使用,也可以单独使用. 推理机支持在 ...

  6. SCRUM的五个价值观

    转自:http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html#tab-id-8 承诺 – 愿意对目标做出承诺 专注– 把你的心思 ...

  7. HDU2874 Connections between cities 最近公共祖先

    第一次按常规的方法求,将所有的查询的u,v,和最近公共祖先都保存起来,然后用tarjan+并查集求最近公共祖先.因为询问的次数过多,所以在保存查询的时候总是MLE,后来参考了一下别人的代码,才突然觉悟 ...

  8. Gym 101470 题解

    A:Banks 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt&q ...

  9. Elasticsearch(5) --- Query查询和Filter查询

    Elasticsearch(5) --- Query查询和Filter查询 这篇博客主要分为 :Query查询和Filter查询.有关复合查询.聚合查询也会单独写篇博客. 一.概念 1.概念 一个查询 ...

  10. C#开发BIMFACE系列27 服务端API之获取模型数据12:获取构件分类树

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE官方示例中,加载三维模型后,模型浏览器中左上角默认提供了“目录树”的功能,清晰地展示了模型的完整构成及上下级关系. 本篇介绍如何获 ...