Apache+Tomcat实现负载均衡

反向代理负载均衡 (Apache2+Tomcat7/8) 
使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。

此次使用的代理为mod_proxy的方式来实现的,因为在Apache2以上的版本中已经集成了,因此不需要再另行安装和配置了,只需要把注释去掉即可,此去掉的配置,个人感觉与Apache虚拟机的实现相类似,去掉以下模块的注释:

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  #让代理服务器能支持HTTP协议

然后把:

#Include conf/extra/httpd-vhosts.conf的注释也去掉,配置的负载均衡

具体配置如下:

#虚拟机配置,负载均衡配置  注意空格
<VirtualHost *:9999>
    ServerAdmin [email protected]
    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=tomcat8_local  smax=5 max=20 ttl=120 retry=300 timeout=15
    BalancerMember ajp://192.168.1.250:8009 loadfactor=1 route=tomcat8_250  smax=5 max=20 ttl=120 retry=300 timeout=15
        ProxySet lbmethod=byrequests
</proxy>

其中:  localhost:8009 和  192.168.1.250:8009为两个负载均衡服务器
 loadfactor=1 route=tomcat8_local  smax=5 max=20 ttl=120 retry=300 timeout=15 这个为配置的参数,最大链接,超时,等等

route=tomcat8_local  可以不写

ProxySet lbmethod=byrequests 为实现负载均衡的方式,共有三种类型

#lbmethod=byrequests 按照请求次数均衡(默认)
#lbmethod=bytraffic 按照流量均衡
#lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

route=tomcat8_local  根据这个route的值,分别在两个Tomat中的Service.xml的   Engine 节点配置上jvmRoute的内容,如下: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat8_local">和以及jvmRoute="tomcat8_250" ,不过我在测试是,感觉如果不配置,也不会影响程序的执行。

启动以上程序就可以进行测试了,测试页面来源于网络:

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

   <b>负载均衡测试:此为:Tomcat7_a上的文件,<font color=red>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</font><b>
</body>
</html>

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

   <b>负载均衡测试:此为:Tomcat7_a上的文件,<font color=red>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</font><b>
</body>
</html>

此时访问就会再个不同的页面了,一个为aaaaaaaaaaaaaaaaaaaaaaaaaaaa 一个为bbbbbbbbbbbbbbbbbbbbbbbbbbb;

如下图所示:

看到的两个Session的值不同,因为这里还没有session的共享配置

注意:

以上仅仅实现了负载均衡,但是对于两个负载同时宕机的话,就需要另外的一台服务器来代替了,这第n+1台服务器就叫热备服务器,配置方式与以上相同,仅需要写上status=+H 标识即可。

BalancerMember http://192.168.1.218:8009 status=+H

以上负载均衡就算全部完成了,如果要实现Session共享,最简单的方式就是在Tomcat中进行配置,配置如下:

在 service.xml文件中的 Engine节点,添加如下代码:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">
                  <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4001"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>
  </Cluster> 

Apache+Tomcat实现负载均衡

时间: 2024-10-04 20:55:40

Apache+Tomcat实现负载均衡的相关文章

Linux下Apache+tomcat搭建负载均衡服务器集群

之前在我的博客里面写了一篇文章http://blog.csdn.net/yannanying/article/details/43018175,本文就是为了补充当时的那篇文章而写.我记得当时是参考百度经验里面的一篇文章写的,文章地址为http://jingyan.baidu.com/article/ab0b5630b632dbc15afa7dc4.html,寒假的时候按照这篇文章的相关内容搭建了Apache+tomcat服务器集群,当时是弄成功了,回到学校后再次想尝试一下怎么搭建,但是发现自己记

apache+tomcat 搭建负载均衡系统

apache+tomcat+mod_jk 搭建负载均衡系统. 0.os系统采用centos6.8 x64 2.6.32-642.el6.x86_641.首先安装好jdk环境本次采用jdk-8u111-linux-x64.gz  jdk和jre的安装目录要不同,否则的话lib目录下没有dt.jar 和tools.jar  要配置好环境变量如下   vi /etc/profile   #add zwy 2017-08-29   export JAVA_HOME=/home/zhang/java/jd

centos6.5 apache+tomcat结合 负载均衡

一. 负载均衡:根据 uri 表达式把请求分发给各个服务器处理.如:/*.jsp = lb_s  就是说把所有jsp请求交给lb_s , 当然它是个Tomcat. 二. 安装配置mod_jk    mod_jk模块的总体功能 由于tomcat的HTTP处理部分都由Java所写(5.5.12版本以后出现了native库,用以提高其I/O和SSL的性能[1]),在高并发的情况下负载较高.而apache对于静态文件的处理能力比tomcat强,所以tomcat开发组开发了与apache结合使用的mod_

Apache+Tomcat+mod_jk负载均衡

一.需要的软件 1.jdk1.5以上 2.Tomcat6以上 3.Apache2.2以上 ,地址http://apache.dataguru.cn//httpd/binaries/win32/ ,名称:httpd-2.2.25-win32-x86-no_ssl.msi 4.jk,地址http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/ ,名称mod_jk-1.2.31-httpd-

Tomcat的负载均衡(apache的mod_jk来实现)

Tomcat的负载均衡(apache的mod_jk来实现):  1.基于Apache的mod_jk来实现:              apache                /    \            tom1    tom2      在完成两台tomcat1,tomcat2的安装之后,希望可以实现负载均衡,使用mod_jk可以实现节点的故障恢复功能,即一个节点出现问题,mod_jk会其不参与负载, 在节点故障恢复后,mod_jk会让其参与负载,对此节点是否失败,对用户而言是透明的

apache以mod_jk方式实现tomcat的负载均衡集群

目录 1.环境准备 2.mod_jk配置 3.测试 4.总结 1.环境准备 准备三台主机,一台提供httpd环境,另两台提供tomcat环境. 主机规划: 主机名:httpd           IP地址:192.168.0.200提供httpd服务 主机名:TomcatA    IP地址:192.168.0.201提供tomcat服务 主机名:TomcatB    IP地址:192.168.0.202提供tomcat服务 jdk与tomcat的安装请参照博文:http://zhaochj.bl

nginx+tomcat+redis负载均衡及session共享

概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.org/download/nginx-1.6.0.tar.gz 负载均衡 commons-pool-2-2.4.2.jar http://mirrors.hust.edu.cn/apache//commons/pool/binaries/commons-pool2-2.4.2-bin.tar.gz j

利用httpd对tomcat进行负载均衡配置

实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:jdk-8u60-linux-x64 apache-tomcat-8.0.24 tomcat-connectors-1.2.41 httpd-2.2.15 httpd-devel-2.2.15 实验拓扑: 一.两台机器安装JAVA环境 1.安装JAVA: wget http://download.oracle.com/otn-pub/j

Nginx 服务器 之Nginx与tomcat实现负载均衡

  本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建文件 nginx-tomcat.conf 文件内容: user  nobody; worker_processes  2; events {        worker_connections  1024;     } http{    # upstream 配置一组后端服务器,     # 请求转