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服务,也就是必须启用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文件,文件内容为:
<%@ 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即可。
Apache和Tomcat 配置负载均衡(mod-proxy方式)-无session共享、无粘性session的更多相关文章
- Apache和Tomcat 配置负载均衡(mod-proxy方式)-粘性session
Tomcat集群配置后端Tomcat Server为支持AJP的独立服务,前端Apache配置为粘性会话(sticky-session),Tomcat不配置Cluster配置和Session复制. 配 ...
- apache+tomcat配置负载均衡,实现http与websocket接口分压
一.应用场景 在生产环境中,应用服务器(此文以tomcat为例)不免面临高访问量的压力,相比而言web服务器(此文以apache为例)能够承担更大的并发量.Apache本身带有一些模块,可以完成对应用 ...
- 基于Apache和tomcat实现负载均衡
1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...
- 简单的 Nginx+Tomcat 配置负载均衡集群
简单 Nginx+Tomcat 配置负载均衡集群 前期准备 解压两个tomcat,修改端口号 server1:8081 server:8082 同时启动 nginx官网下载解压版nginx 创建一个简 ...
- Windows下使用Nginx+tomcat配置负载均衡
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口 ...
- nginx和tomcat配置负载均衡和session同步
一.背景 因业务需求,现需配置多台服务器,实现负载均衡. 二.解决方案 使用 nginx + tomcat,在这一台应用服务器部署一个nginx和两个tomcat.通过nginx修改配置后reload ...
- 从零开始学 Java - CentOS 下 Nginx + Tomcat 配置负载均衡
为什么现在有非常多的聪明人都在致力于互联网? 最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做 ...
- nginx + tomcat配置负载均衡
目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...
- Nginx+Tomcat 配置负载均衡集群
一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...
随机推荐
- 深刻剖析spring三种注入方式以及使用注解的原理
概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作.如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO ...
- jQuery事件以及动画
jQuery事件以及动画 一.jQuery事件 加载DOM 在页面加载完毕后, 浏览器会通过 JavaScript 为 DOM 元素添加事件. 在常规的 JavaScript 代码中, 通常使用 wi ...
- 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP
P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...
- Codeforces Round #504 E - Down or Right 交互题
1023E 题意: 交互题.在一个有障碍地图中,问如何走才能从(1,1)走到(n,n),只能向右或者向左走.每次询问两个点,回复你这两个点能不能走通. 思路: 只用最多2*n-2次询问.从(1,1), ...
- HDU 4289 Control 最小割
Control 题意:有一个犯罪集团要贩卖大规模杀伤武器,从s城运输到t城,现在你是一个特殊部门的长官,可以在城市中布置眼线,但是布施眼线需要花钱,现在问至少要花费多少能使得你及时阻止他们的运输. 题 ...
- Atcoder C - +/- Rectangle(思维+构造)
题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_c 题解:挺简单的构造,很容易想到的构造方法就是(h*w)的小矩阵里其他值赋值为1,最后一个赋值为 ...
- Atcoder F - Mirrored(思维+搜索)
题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...
- lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for ...
- kick start 2019 round D T3题解
---恢复内容开始--- 题目大意:共有N个房子,每个房子都有各自的坐标X[i],占据每个房子需要一定花费C[i].现在需要选择K个房子作为仓库,1个房子作为商店(与题目不同,概念一样),由于仓库到房 ...
- poj1037 [CEOI 2002]A decorative fence 题解
---恢复内容开始--- 题意: t组数据,每组数据给出n个木棒,长度由1到n,除了两端的木棒外,每一根木棒,要么比它左右的两根都长,要么比它左右的两根都短.即要求构成的排列为波浪型.对符合要求的排列 ...