基于mod_proxy+Apache 2.2.16+Tomcat 7的负载均衡与集群配置(二)
时间:2015-01-14 14:24 来源:linux.it.net.cn 作者:IT
第五章. 集群测试
1. tomcat7_a和tomcat7_b的cluster工程中分别添加测试文件:testCluster.jsp
-
<span style="font-family:宋体;font-size:13px;"><%@ page contentType="text/html; charset=GBK" %>
-
<%@ page import="java.util.*" %>
-
<html><head><title>Cluster Test</title></head>
-
<body>
-
<%
-
//HttpSession session = request.getSession(true);
-
System.out.println(session.getId());
-
out.println("<br> SESSION ID:" + session.getId()+"<br>");
-
// 如果有新的请求,则添加session属性
-
String name = request.getParameter("name");
-
if (name != null && name.length() > 0) {
-
String value = request.getParameter("value");
-
session.setAttribute(name, value);
-
}
-
out.print("<b>Session List:</b>");
-
Enumeration<String> names = session.getAttributeNames();
-
while (names.hasMoreElements()) {
-
String sname = names.nextElement();
-
String value = session.getAttribute(sname).toString();
-
out.println( sname + " = " + value+"<br>");
-
System.out.println( sname + " = " + value);
-
}
-
%>
-
<form action="testCluster.jsp" method="post">
-
名称:<input type=text size=20 name="name">
-
<br>
-
值:<input type=text size=20 name="value">
-
<br>
-
<input type=submit value="提交">
-
</form>
-
</body>
-
</html></span>
2. 启动tomcat7_a,启动完毕后,启动tomcat7_b
3. 进入http://localhost:8081/cluster/testCluster.jsp 对应tomcat7_a(8081),登录几次,可看到
4. 另外打开一个浏览器,进入http://localhost:8082/cluster/testCluster.jsp对应tomcat7_b(8082),登录name:tomcat_b,value:b value可看到
5. 刷新tomcat7_a(8081)相关页面,可以看到从tomcat7_b提交的值session同步过来了,说明集群成功。
第六章. Session集群工作步骤
参照tomcat7 doc:
To make it easy to understand how clustering works, We are gonna take you through a series of scenarios. In the scenario we only plan to use two tomcat instances TomcatA and TomcatB. We will cover the following sequence of events:
1. TomcatA starts up
2. TomcatB starts up (Wait that TomcatA start is complete)
3. TomcatA receives a request, a session S1 is created.
4. TomcatA crashes
5. TomcatB receives a request for session S1
6. TomcatA starts up
7. TomcatA receives a request, invalidate is called on the session (S1)
8. TomcatB receives a request, for a new session (S2)
9. TomcatA The session S2 expires due to inactivity.
第七章. 负载均衡配置
Tomcat有两种负载均衡的方式:
1. 使用 JK1.2.x native connector
2. 使用Apache HTTP Server 2.x with mod_proxy
我们使用的是mod_proxy,在Apache Http Server2.2以上版本已经自动带有:
Mod_proxy supports either HTTP or AJP load balancing. 我们通过ajp方式。
详细查看:tomcat7\webapps\docs\balancer-howto.html
1. 首先,监听8000端口, 在Apache安装目录下找到conf/httpd.conf文件
稍前面加上
-
<span style="font-family:宋体;font-size:13px;"># 监听端口和监听地址
-
Listen 8000</span>
2. conf/httpd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。
-
<span style="font-family:宋体;font-size:13px;">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 </span>
3. conf/httpd.conf文件最后加上:
-
<span style="font-family:宋体;font-size:13px;">#虚拟机配置,负载均衡配置
-
<VirtualHost *:8000>
-
ServerAdmin weigbo@163.com
-
ServerName localhost
-
ServerAlias localhost
-
#小心,有些地方要有空格,要不然会出错哈哈。
-
ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
-
ProxyPassReverse / balancer://cluster/
-
#ErrorLog "logs/error.log"
-
#CustomLog "logs/access.log" common
-
</VirtualHost>
-
-
#The ProxyRequests directive should usually be set off when using ProxyPass.
-
ProxyRequests Off
-
<proxy balancer://cluster>
-
BalancerMember ajp://localhost:8009 loadfactor=1 route=tomcat7_a smax=5 max=20 ttl=120 retry=300 timeout=15
-
BalancerMember ajp://localhost:9009 loadfactor=1 route=tomcat7_b smax=5 max=20 ttl=120 retry=300 timeout=15
-
# status=+H为配置热备,当所有机器都over时,才会请求该机器
-
#BalancerMember http://192.168.1.218:8009 status=+H
-
ProxySet lbmethod=bytraffic
-
</proxy></span>
4. Tomcat7配置(server.xml):
因为是同一机器,两个应用,所以配不同的端口,不同机器则不用配,要和前面的ajp对应上。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
第八章. 负载均衡测试
Tomcat7_a的cluster工程的测试文件:testCluster.jsp加上html代码:
<b>负载均衡测试:此为:Tomcat7_a上的文件,<font color=red>aaaaaaaaaaaaaaaaaa</font><b>
Tomcat7_b的cluster工程的测试文件:testCluster.jsp加上html代码
<b>负载均衡测试:此为:Tomcat7_b上的文件,<font color=red>bbbbbbbbbbbbbbbbbb</font><b>
打开浏览器,进入地址:http://localhost:8000/cluster/testCluster.jsp
多刷新几次,会看到页面值会在aaaaa和bbbbb间切换,说明负载均衡配置成功。
第九章. Mod_proxy负载均衡算法
目前mod_proxy有3种负载均衡算法:
1. Request Counting(我猜是Round-robin), lbmethod=byrequests
2. Weighted Traffic Counting(这个是按权重,此例也是用此算法), lbmethod=bytraffic
3. Pending Request Counting(从apche文档来看,应该是按负载量,也就是往负载少的派发新请求). lbmethod=bybusyness
它们通过lbmethod值设置。
第十章. 参考文档:
Tomcat 7 doc文档
http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
第十一章. 补充内容:负载均衡管理器
负载均衡管理器可以动态更新负载均衡的应用,你可以用管理器更改负载因子或者特定的应用,还可以把应用设为off模式。
为了使用balancer management, mod_status和mod_proxy_balancer 必需要加载到apache.
设置:
#此项为mod_proxy_balancer管理器需要
LoadModule status_module modules/mod_status.so
在负载均衡项前加上:
#mod_balancer管理应用
<Location /balancer-manager>
SetHandler balancer-manager
Order Allow,Deny
Allow from all
</Location>
可以通过以下地址访问:http://localhost:8000/balancer-manager
(责任编辑:IT)
第五章. 集群测试 1. tomcat7_a和tomcat7_b的cluster工程中分别添加测试文件:testCluster.jsp
3. 进入http://localhost:8081/cluster/testCluster.jsp 对应tomcat7_a(8081),登录几次,可看到 4. 另外打开一个浏览器,进入http://localhost:8082/cluster/testCluster.jsp对应tomcat7_b(8082),登录name:tomcat_b,value:b value可看到 5. 刷新tomcat7_a(8081)相关页面,可以看到从tomcat7_b提交的值session同步过来了,说明集群成功。 第六章. Session集群工作步骤 参照tomcat7 doc: To make it easy to understand how clustering works, We are gonna take you through a series of scenarios. In the scenario we only plan to use two tomcat instances TomcatA and TomcatB. We will cover the following sequence of events: 1. TomcatA starts up 2. TomcatB starts up (Wait that TomcatA start is complete) 3. TomcatA receives a request, a session S1 is created. 4. TomcatA crashes 5. TomcatB receives a request for session S1 6. TomcatA starts up 7. TomcatA receives a request, invalidate is called on the session (S1) 8. TomcatB receives a request, for a new session (S2) 9. TomcatA The session S2 expires due to inactivity. 第七章. 负载均衡配置 Tomcat有两种负载均衡的方式: 1. 使用 JK1.2.x native connector 2. 使用Apache HTTP Server 2.x with mod_proxy 我们使用的是mod_proxy,在Apache Http Server2.2以上版本已经自动带有: Mod_proxy supports either HTTP or AJP load balancing. 我们通过ajp方式。 详细查看:tomcat7\webapps\docs\balancer-howto.html 1. 首先,监听8000端口, 在Apache安装目录下找到conf/httpd.conf文件 稍前面加上
2. conf/httpd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。
3. conf/httpd.conf文件最后加上:
因为是同一机器,两个应用,所以配不同的端口,不同机器则不用配,要和前面的ajp对应上。 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /> 第八章. 负载均衡测试 Tomcat7_a的cluster工程的测试文件:testCluster.jsp加上html代码: <b>负载均衡测试:此为:Tomcat7_a上的文件,<font color=red>aaaaaaaaaaaaaaaaaa</font><b> Tomcat7_b的cluster工程的测试文件:testCluster.jsp加上html代码 <b>负载均衡测试:此为:Tomcat7_b上的文件,<font color=red>bbbbbbbbbbbbbbbbbb</font><b> 打开浏览器,进入地址:http://localhost:8000/cluster/testCluster.jsp 多刷新几次,会看到页面值会在aaaaa和bbbbb间切换,说明负载均衡配置成功。 第九章. Mod_proxy负载均衡算法 目前mod_proxy有3种负载均衡算法: 1. Request Counting(我猜是Round-robin), lbmethod=byrequests 2. Weighted Traffic Counting(这个是按权重,此例也是用此算法), lbmethod=bytraffic 3. Pending Request Counting(从apche文档来看,应该是按负载量,也就是往负载少的派发新请求). lbmethod=bybusyness 它们通过lbmethod值设置。 第十章. 参考文档: Tomcat 7 doc文档 http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html http://httpd.apache.org/docs/2.2/mod/mod_proxy.html 第十一章. 补充内容:负载均衡管理器 负载均衡管理器可以动态更新负载均衡的应用,你可以用管理器更改负载因子或者特定的应用,还可以把应用设为off模式。 为了使用balancer management, mod_status和mod_proxy_balancer 必需要加载到apache. 设置: #此项为mod_proxy_balancer管理器需要 LoadModule status_module modules/mod_status.so 在负载均衡项前加上: #mod_balancer管理应用 <Location /balancer-manager> SetHandler balancer-manager Order Allow,Deny Allow from all </Location> 可以通过以下地址访问:http://localhost:8000/balancer-manager (责任编辑:IT) |