`

apache 使用 proxy 实现tomcate负载均衡(session复制)

阅读更多
Apache+tomcat负载均衡的入门配置 
目录 
一、准备工作 
二、配置Apache 
1、打开相关的模块。 
2、配置tomcat集群。 

三、配置tomcat 2 
1、配置server的关闭。 
2、配置Connector 
3、配置Engine 
4、配置Session的复制 
四、配置web项目web.xml
五、负载分配算法设置
六、热备份(Hot Standby) 


一、准备工作 
安装JDK并配置环境变量。这里要求至少1.5以上版本。 
安装apache2.2。我的安装目录为:D:\Apache2.2 
安装tomcat6。为了端口不起冲突,建议直接解压。我这里只使用了两台tomcat作为集群服务器。其路径分别为D:\apache-tomcat-6.0.20_v1、D:\apache-tomcat-6.0.20_v2 

二、配置Apache 
这里说明一下,我在网上找到的一些资料都在介绍mod_JK的方式配置负载均衡。但是从apache2.X版本之后其自身已经集成了mod_jk可以直接使用mod_proxy的方式进行负载均衡的配置,所以下面介绍的也即是这种方式。 
在D:\Apache2.2\conf目录下找到httpd.conf文件,并进行修改。修改步骤: 

1、打开相关的模块。 
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 
LoadModule rewrite_module modules/mod_rewrite.so 
在配置文件里找到上述模块,将前边的“#”去掉. 

2、配置tomcat集群。 
在该配置文件的最后加上: 
ProxyRequests Off 
ProxyPass / balancer://cluster/ 
<proxy balancer://cluster> 
BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1 
BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2 
</proxy> 
# 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!!  
<Location /balancer-manager>  
    SetHandler balancer-manager  
    order Deny,Allow  
    Deny from all  
    Allow from localhost  
</Location>  
     注意红色部分,因为这里我只使用了一台物理机器作为集群的配置,所以就直接使用了localhost指向本地的集群服务器,你也可以使用127.0.0.1。如果这里你使用多台机器一起配合的话,只需要将localhost修改为其他机器的IP地址就行。 
      <Location /balancer-manager>是用来监视负载均衡的工作情况的,调试时可以加上(生产环境中禁止使用!),然后访问 http://localhost/balancer-manager/ 即可看到负载均衡的工作状况。

三、配置tomcat 

在D:\apache-tomcat-*\conf找到server.xml,然后着手修改。 
1、配置server的关闭。 
因为我是在同一台机器上配置两台tomcat,所以为了使tomcat关闭不出现端口被占用的情况,需要修改关闭端口。
<Server port="8005" shutdown="SHUTDOWN"> 
修改为: 
<Server port="XXXX" shutdown="SHUTDOWN"> 
注意,我这里用了两台tomcat,所以第一个tomcat我就选择了默认的端口8005,第二个tomcat我将此端口修改为了9005。总之,如果你有多台tomcat服务器群,都需要将它们的端口修改为互不冲突的端口号。 
2、配置Connector 
这里又两个地方需要修改,第一个就是tomcat监听的http端口,另一个就是tomcat监听的AJP端口: 
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" /> 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
注意,蓝色部分是tomcat的http端口,因为我在同一台机器上配置了两个tomcat,为了使它们的http端口不冲突,我将第一个tomcat使用默认的端口即8080,第二个tomcat的http端口我修改为了8081。同样的道理,如果你还有其他的tomcat,记得将它们的http端口修改为互不冲突的端口号即可。 
另一个需要修改的端口,红色部分的端口,这里是apache和tomcat链接的关键,前台apache就是通过AJP协议与tomcat进行通信的,以完成负载均衡的作用。现在回过头去看看apache的httpd.conf配置, 
<proxy balancer://cluster> 
BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1 
BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2 
</proxy> 
那么,另一个tomcat的AJP端口你知道要配置成什么了吗?对了,就是9009。 
3、配置Engine 
<Engine name="Catalina" defaultHost="localhost">,这个是原来的配置,现在将这个配置修改为:<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">,然后另一个tomcat修改为<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">。 

现在再回过头去看看apache的配置: 
<proxy balancer://cluster> 
BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1 
BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2 
</proxy> 
这里再说明一点,loadfactor相当于一种加权策略,loadfactor的值越大,对应的tomcat服务器分到的请求就越多。像上面的这种设置就说明两台tomcat将平均负载。 

4、配置Session的复制 
Tomcat里的service.xml中增加以下代码,注:下列官网配置代码中建议注释红色部分代码,否则启动报严重错误:FarmWarDeployer can only work as host cluster subelement!,但不影响正常使用。
 <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="4000"
                      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"/>-->
          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
      </Cluster>
 
 
四、配置web项目web.xml
在web应用项目WEB-INF/web.xml文件<web-app>元素的最后加上: <distributable/>
 
完成上述步骤,进行session同步测试,顺利通过!
 
五、负载均衡算法
 默认情况下,负载均衡会尽量让各个服务器接受的请求次数满足预设的比例。如果要改变算法,可以使用 lbmethod 属性。如: 
Httpd.conf代码  收藏代码
ProxyRequests Off  
ProxyPass / balancer://cluster/ 
<proxy balancer://cluster> 
BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1 
BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2 
</proxy> 
 
ProxySet lbmethod=bytraffic  
lbmethod可能的取值有: 
lbmethod=byrequests 按照请求次数均衡(默认) 
lbmethod=bytraffic 按照流量均衡 
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器) 
 六、热备份(Hot Standby) 
只要在后面加上status=+H即可(如下代码红色部分),正常情况下请求总是流向8009,一旦8009挂掉,Apache会检测到错误并把请求分流给9009。Apache会每隔几分钟检测一下8009的状况,如果8009恢复,就继续使用8009。 
ProxyRequests Off  
ProxyPass / balancer://cluster/ 
<proxy balancer://cluster> 
BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1  
BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2  status=+H
</proxy> 
 
本博客参考了:http://denghuan.iteye.com/blog/1968574 进行部分内容的补充,主要是实现session复制
分享到:
评论

相关推荐

    Apache_proxy负载均衡和Session复制

    Apache_proxy负载均衡和Session复制。

    apache,tomcat负载均衡和session复制

    当我们谈论"Apache,tomcat负载均衡和session复制"时,这意味着我们要探讨如何在多台服务器之间分配负载,并确保用户会话的无缝迁移和一致性。 **负载均衡**是解决高并发、高可用性问题的重要策略。它通过将来自...

    Apache+tomcat实现负载均衡

    本篇文章将详细介绍如何使用Apache和Tomcat实现负载均衡。 负载均衡的核心思想是将来自用户的请求分发到多个服务器上,以避免单一服务器过载。在Apache与Tomcat的组合中,Apache通常作为前端负载均衡器,通过HTTP...

    3.3、 Weblogic proxy负载均衡和session复制1

    此外,使用 Nginx 等负载均衡工具也可以实现负载均衡和 Session 复制。但是,使用 Weblogic 代理服务器实现负载均衡和 Session 复制具有更好的灵活性和可扩展性。 本文主要讲解了 Weblogic 代理负载均衡和 Session ...

    java使用apache+resin实现负载均衡设置

    可以使用 Apache 的模块 mod_proxy_balancer 来实现负载均衡。 六、结论 使用 Apache+Resin 实现负载均衡设置可以提高系统的可用性和性能。但是,需要根据实际情况选择合适的解决方案,并且需要考虑 License 费用...

    Apache负载均衡 Tomcat6的集群和session的复制

    本篇将深入探讨Apache如何实现负载均衡,以及Tomcat集群和session复制的相关知识。 首先,Apache的负载均衡主要通过模块mod_proxy来实现。这个模块能够将客户端的HTTP请求转发到不同的后端服务器,从而达到负载均衡...

    Nginx+tomcat 实现负载均衡session共享demo

    本教程将详细讲解如何通过`Nginx`实现`Tomcat`集群的负载均衡,并实现`session`共享。 首先,我们要理解负载均衡的基本概念。负载均衡是通过将工作负载分散到多个计算资源,以优化资源使用、最大化吞吐量、最小化...

    .在32位操作系统上配置apache+tomcat集群/负载均衡/session复制

    如何构建一个使用Apache HTTP Server作为前端负载均衡器,与多个Tomcat应用服务器协同工作的集群环境,并实现session会话在这些服务器间的复制。这通常是为了提高Web应用程序的可用性和性能。 在这样的架构中,...

    Apache负载均衡实现

    在本文中,我们将深入探讨如何使用Apache HTTP Server作为反向代理,实现负载均衡的功能。 首先,Apache HTTP Server是一款广泛应用的开源Web服务器,支持多种功能扩展,包括负载均衡。在我们的例子中,我们将使用...

    apache配置负载均衡

    Apache 的 proxy 模块可以将用户的访问请求转发到多个后端服务器或 Tomcat 中,从而实现负载均衡。同时,Apache 的 proxy 模块还可以对用户的访问请求进行缓存、压缩和加密等处理,以提高访问性能。 Apache 配置...

    apache 反向代理实现 负载均衡

    Apache反向代理是一种网络服务器配置技术,用于将客户端请求转发到后端服务器集群,从而实现负载均衡。在高流量网站或应用中,反向代理能够有效地分发流量,提高服务的稳定性和响应速度,同时也提供了更好的可扩展性...

    Apache+Tomcat实现负载均衡及集群(session同步)--五、session同步(3)使用memcache

    Apache和Tomcat的组合经常被用来搭建这样的架构,特别是在实现负载均衡和集群时。在这个场景中,session同步是一个核心问题,因为用户session数据的正确管理和共享是保持应用程序一致性和用户体验的关键。本文将深入...

    轻松实现Apache,Tomcat集群和负载均衡

    Apache可以通过模块如mod_proxy来实现负载均衡。 4. **mod_proxy模块**: Apache的mod_proxy模块允许Apache作为反向代理服务器,接收来自客户端的请求,并根据预设策略将这些请求转发到后端的Tomcat服务器。它支持...

    服务器负载均衡技术:使用apache部署集群实现负载均衡

    Apache作为一款广泛应用的开源Web服务器,可以通过一些扩展实现负载均衡功能,比如使用mod_proxy模块。本文将探讨如何使用Apache部署集群来实现负载均衡。 首先,我们需要了解负载均衡的基本原理。负载均衡器(Load...

    jboss4.2.3GA集群配置 Apache负载均衡

    通过以上步骤,我们可以创建一个简单的JBoss集群,并通过Apache实现负载均衡。在实际生产环境中,可能需要根据业务需求调整负载策略,例如轮询、最少连接数、健康检查等。此外,集群的扩展性、监控和故障恢复也是...

    apache2.2.4 负载均衡.txt

    本文将详细介绍如何在Apache 2.2.4版本中实现负载均衡配置。 根据描述信息,某公司早期已经规划了负载均衡方案,但因项目时间和流量原因仅启用了一台服务器,现在计划对该方案进行实际测试和部署。这涉及到Apache中...

    nginx+redis负载均衡、session共享

    在构建高性能、高可用的Web服务时,"nginx+redis负载均衡、session共享"是一个常见的解决方案。这个方案结合了Nginx的反向代理和负载均衡能力,以及Redis的内存数据存储和分布式特性,用于处理高并发场景下的HTTP...

    apache与resin整合实现负载均衡.doc

    Apache 与 Resin 整合实现负载均衡是一种常见的 Web 服务器集群技术,旨在提高网站的可用性和性能。这种集成允许 Apache 作为前端服务器接收请求,并根据预设策略将这些请求分发到多个后端 Resin 服务器,这些服务器...

Global site tag (gtag.js) - Google Analytics