Apache配置反向代理、负载均衡和集群(mod

Apache配置负载均衡和集群使用mod_jk的方式比较多,但是mod_jk已经停止更新,并且配置相对复杂。Apache2.2以后,提供了一种原生的方式配置负载均衡和集群,比mod_jk简单很多。

1.Apache配置反向代理
正向代理一般是指PC连接到代理服务器,由代理服务器转发请求到网站。而反向代理指的是用户将请求发送给反向代理服务器,由反向代理服务器将请求路由转发到具体的服务器。
比如机房有两个Tomcat提供服务,但是由于防火墙的原因,用户不能直接访问。这个时候,可以使用反向代理服务器,将请求转发到Tomcat。而防火墙只需要开启反向代理服务器的端口即可。

Apache配置反向代理、负载均衡和集群(mod

下面实验假设内网Tomcat提供谷歌服务,外网通过反向代理,访问这个服务。
 修改/etc/httpd/conf/httpd.conf 增加下面的配置

访问链接:

Apache配置反向代理、负载均衡和集群(mod

Apache反向代理设置方法

Apache做反向代理服务器

日志分析工具Awstats实战之Apache篇-多站点日志分析

2.负载均衡
    负载均衡应该是最常用的横向扩展技术。Apache负载均衡将前端的请求,按照配置的比例转发给后台的Tomcat服务器,从而提高了并发访问量。作为mod_proxy方式,配置负载均衡十分简单,就是在反向代理的基础上,将请求发送到balancer。
    首先,修改War包程序的web.xml文件,增加<distributable/>标识。
    其次,修改每个Tomcat服务器的server.xml,配置jvmRoute   
    最后,修改apache的httpd.conf文件,增加如下内容

Apache配置反向代理、负载均衡和集群(mod

Apache负载均衡的实现

CentOS 6.4下LVS负载均衡之VS/NAT机制(一主一从提供冗余)
   
    其中ProxyPass /images ! 表示/images开头的请求不会转发给Tomcat,而是作为静态资源在Apache的images目录下寻找资源文件。
    而反向代理将所有的/Test请求都转发给名叫mycluster的balancer。
    而这个balancer有两个Tomcat成员。

loadfactor表示请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。   
lbmethod表示负载均衡的算法,lbmethod可能的取值有:
lbmethod=byrequests 按照请求次数均衡(默认)               
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

stickySession=JSESSIONID表示开启粘性Session。他的意思是如果第一次请求分到了worker1的Tomcat,那么这个用户的后续请求,都会分配给worker1的这个Tomcat。
    使用一个测试页面查看粘性Session

index.jsp

<%@ 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>

<br>

值:<input type=text size=20>

<br>

<input type=submit value="提交">

</form> </body>

</html>
可以看到,由于粘性Session的作用,对网页的反复操作,都被Apache发送到了同一个Tomcat(worker2)

Apache配置反向代理、负载均衡和集群(mod

查看firefox的cookie信息,apache就是根据JSESSIONID后面的routeid实现粘性Session的。

Apache配置反向代理、负载均衡和集群(mod

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/46987575eda8c3a3f1fed9b263485737.html