Apache配置反向代理、负载均衡和集群(mod_proxy方式)

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

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

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

访问链接:http://192.168.1.105/google

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

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ page import="java.util.*" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <%
  12. System.out.println(session.getId());
  13. out.println("
    SESSION ID:" + session.getId()+"
    ");
  14. // 如果有新的请求,则添加session属性
  15. String name = request.getParameter("name");
  16. if (name != null && name.length() > 0) {
  17. String value = request.getParameter("value");
  18. session.setAttribute(name, value);
  19. }
  20. out.print("Session List:");
  21. Enumeration<String> names = session.getAttributeNames();
  22. while (names.hasMoreElements()) {
  23. String sname = names.nextElement();
  24. String value = session.getAttribute(sname).toString();
  25. out.println( sname + " = " + value+"
    ");
  26. System.out.println( sname + " = " + value);
  27. }
  28. %>
  29. <form action="index.jsp" method="post">
  30. 名称:<input type=text size=20 name="name">
  31. <br>
  32. 值:<input type=text size=20 name="value">
  33. <br>
  34. <input type=submit value="提交">
  35. </form> </body>
  36. </html>

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

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

3.集群
    我觉得集群和负载均衡的区别就是集群包括Session复制和故障转移。
    Session复制是广义的,实际上就是故障转移的时候,还可以继续读取这个用户的Session。
    Session复制只是其中的一种方式,也可以采用Session服务器的方式。
    例如:
    http://blog.itpub.net/29254281/viewspace-1063018/

在负载均衡的基础上配置集群
    首先,开启Tomcat的Session复制功能
    

  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
  2. <Manager className="org.apache.catalina.ha.session.DeltaManager"
  3. expireSessionsOnShutdown="false"
  4. notifyListenersOnReplication="true"/>
  5. <Channel className="org.apache.catalina.tribes.group.GroupChannel">
  6. <Membership className="org.apache.catalina.tribes.membership.McastService"
  7. address="224.0.0.0"
  8. port="45564"
  9. frequency="500"
  10. dropTime="3000"/>
  11. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
  12. address="192.168.1.100"
  13. port="4000"
  14. autoBind="100"
  15. selectorTimeout="5000"
  16. maxThreads="6"/>
  17. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
  18. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
  19. </Sender>
  20. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
  21. <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  22. </Channel>
  23. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
  24. filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
  25. <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
  26. <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
  27. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
  28. </Cluster>

    然后在Apache配置故障转移(nofailover=Off)

配置了集群之后,请求从前端过来,假如分配到了worker1,那么因为粘性Session,他会一直访问worker1.
    如果worker1宕机,这个用户的后续请求会自动转移到worker2.
    由于Tomcat配置了Session复制,所以Session信息没有丢失。
    整个过程对于用户是完全透明的。

参考:
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
http://snowolf.iteye.com/blog/743611
http://www.iteye.com/topic/757125
官方文档:
http://apache.jz123.cn/mod/mod_proxy.html

时间: 2024-10-06 00:35:14

Apache配置反向代理、负载均衡和集群(mod_proxy方式)的相关文章

Apache + Tomcat + JK 实现负载均衡和集群(状态复制)

原文请见http://www.cnblogs.com/dennisit/p/3370220.html 本文介绍了集群和负载均衡的基本开源实现,实现了用Apache分发请求到多个Tomcat里面对应的应用. 模块介绍 - Apache作为Web服务器,用于处理静态Http请求: - Tomcat作为应用服务器(Servlet容器),处理动态请求: - JK 作为Apache与Tomcat之间的桥梁,实现了Apache与Tomcat一对多的对应,使后端Tomcat负载均衡. 开发环境 - Windo

Apache + Tomcat + JK 实现负载均衡和集群

本文介绍了集群和负载均衡的基本开源实现,实现了用Apache分发请求到多个Tomcat里面对应的应用. 模块介绍 - Apache作为Web服务器,用于处理静态Http请求: - Tomcat作为应用服务器(Servlet容器),处理动态请求: - JK 作为Apache与Tomcat之间的桥梁,实现了Apache与Tomcat一对多的对应,使后端Tomcat负载均衡. 开发环境 - Windows 7操作系统 - Java SE8 - Apache 2.2.14    (本地安装路径:D:\A

nginx ----&gt; nginx配置/反向代理/负载均衡

1 server { 2 listen 80; 3 server_name localhost; 4 5 location / { 6 #将请求与我们定义的服务器进行映射 7 proxy_pass http://localhost:8080/loginForm; //分号不能少 8 #root html; 9 #index index.html index.htm; 10 } 11 12 error_page 500 502 503 504 /50x.html; 13 location = /5

Nginx反向代理+负载均衡简单实现(https方式)

背景:A服务器(192.168.1.8)作为nginx代理服务器B服务器(192.168.1.150)作为后端真实服务器 现在需要访问https://testwww.huanqiu.com请求时从A服务器上反向代理到B服务器上 这就涉及到nginx反向代理https请求的配置了~~~ ------------------------------------------------------------------------------------A服务器(192.168.1.8)上的操作流程

编译安装nginx并实现反向代理负载均衡和缓存功能

一.编译安装nginx 1.下载 [[email protected] ~]# wget http://nginx.org/download/nginx-1.10.0.tar.gz 2.解压 [[email protected] ~]# tar xf nginx-1.10.0.tar.gz [[email protected] ~]# cd nginx-1.10.0 3.安装依赖组件 [[email protected] nginx-1.10.0]# yum install pcre-devel

基于mod_proxy+Apache 2.2.16+Tomcat 7的负载均衡与集群配置

第一章. 背景简介 对于大多数企业应用,都希望能做到7*24小时不间断运行.要保持如此高的可用性并非易事,比较常见的做法是将系统部署到多台机器上,每台机器都对外提供同样的功能,这就是集群.系统变为集群时,除了要求系统能够支持水平伸缩外,还要解决两个问题: 1, 如何均衡地访问到提供业务功能的机器. 2, 如何保证当机器出现问题时,用户能自动跳转到另外的机器,不影响使用. 常用的负载均衡技术有硬件和软件两种,本示例常用软件的技术实现.软件也有很多实现技术,如基于apache的mod_jk以及mod

Tomcat反向代理+负载均衡的四种方法配置

环境拓扑 环境说明: IP地址 功能描述 nginx or httpd 172.16.4.100 代理服务器,将用户请求分发到后端的Tomcat服务器实现反向代理和负载均衡 Tomcat-01 172.16.4.101 后端实际提供服务的服务器 Tomcat-02 172.16.4.102 后端实际提供服务的服务器 系统环境都如下所示: [[email protected] ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [[emai

Centos7.4 Nginx反向代理+负载均衡配置

Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65.192 Nginx-Web 在三台Server安装Nginx: # yum install -y nginx 在172.16.65.190配置Nginx反向代理+负载均衡: # vim /etc/nginx/nginx.conf user nginx; worker_processes auto;

反向代理负载均衡

使用代理服务器可 以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web 服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式. 中文名 反向代理负载均衡 外文名 reverse-proxy load balancing 目录 1 概念 2 ngi