2014-04-15
今天做了一件很有意思的事情,对于我来说算是一个挑战了,研究了Apache的负载均衡,虽然研究的很简单,但是还是很好玩的。
我是在虚拟机上做的。简单架构是下面这样的:tomcat1和Apache跑在了同一个虚拟机上:
1.首先保证/et c/httpd/conf/httpd.conf以下参数没有被注释掉
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
- LoadModule proxy_http_module modules/mod_proxy_http.so
2.修改httpd.conf配置文件,添加如下
1017 ProxyRequests Off
1018 <Proxy balancer://mycluster>
1019 BalancerMember http://192.168.32.100:8080 loadfactor=1
1020 BalancerMember http://192.168.32.250:8080 loadfactor=1 status=+H
1022 </Proxy>
1023 ProxyPass /swmagic balancer://mycluster
#loadfactor=1
此参数为权值,例如你的权值越大,那相当于访问此tomcat几率越大,这是一种算法
#BalancerMember http://192.168.32.250:8080 loadfactor=1 status=+H
后面加了status=+H 表示将此台服务器作为备份服务器:每次访问的时候都会访问第一台服务器上的tomcat:即192.168.32.100这台,它会实时的去检测主节点是否当机,如果当机了会马上切换到此背负的服务器上。如果不加则按照设定的权值去访问服务器
#ProxyPass ProxyPass /swmagic balancer://mycluster
ProxyPass后面的参数/swmagic可以自己任意设定:例如我访问tomcat的时候后面就要加上/swmagic就可以了。
3.lbmethod表示负载均衡的算法,lbmethod可能的取值有:
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器) 这个目前还没有试过,这个是抄的:
4.
- # 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!!
- <Location /balancer-manager>
- SetHandler balancer-manager
- order Deny,Allow
- Deny from all
- Allow from localhost
- </Location>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
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="index.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>