`

Window下Apache负载均衡+Tomcat集群

 
阅读更多

方案:
1、基于request的负载均衡
    该种方式下,负载均衡器 (load balancer)会根据各个node的状况,把每个 http request进行分发。使用这样的均衡策略,就必须在多个node之间复制用户的session,实时保持整个cluster的用户状态同步,这种操作被称为session复制(session replication)。Jboss的实现原理是使用拦截器(interceptor),根据用户的同步策略拦截request,做同步处理后再交给server产生响应。

     优点是客户不会被绑定都具体的node,只要还有一个node存活,用户状态都不会丢失,cluster都能够继续工作。

缺点是node之间通信频繁,响应速度有影响,多并发、高频操作的情况下性能下降比较厉害。

2、    基于用户的负载均衡
该种方式下,当用户发出第一个request后,负载均衡器动态的把该用户分配到某个节点,并记录该节点的jvm路由,以后该用户的所有request都会被绑定这个jvm路由,用户只会与该server发生交互,这种策略被称为粘性session(session sticky)。

     优点是响应速度快,多个节点之间无须通信。

缺点也很明显,某个node死掉以后,它负责的所有用户都会丢失session。

 

采取方案:

         目前采用第二种,也就是session stiky (1小时)

         文件服务器的配置   (1天)  

         Tomcat参数优化    (1天)

集群的配置

 

首先在apache 的conf目录下找到httpd.conf(apache 的配置文件)文件

在该文件里找到

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

并且把上面的#号去掉

然后找到

Include conf/extra/httpd-vhosts.conf

把上面的#号去掉

在最后一行加上

ProxyRequests Off

 

<proxy balancer://cluster>

 

BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomcat3(与该tomcat里德jvmRote名字一样)

 

BalancerMember ajp://127.0.0.1:8020 loadfactor=1 route=tomcat2

 

</proxy>

 

第二步找到\conf\extra包下面的httpd-vhosts.conf

在下面加上

<VirtualHost *:80>

ServerAdmin yancheng100088@163.com

ServerName localhost

ServerAlias   localhost

ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On

ProxyPassReverse / balancer://cluster/

ErrorLog "logs/dummy-host2.163.com-error.log"

    CustomLog "logs/dummy-host2.163.com-access.log" common

</VirtualHost>

 

 

第三步找到解压后的tomcat在不同的tomcat里修改server.xml里的端口参数使之不重复

(大家都知道就不详细说了)

这里改几个比较重要的参数

一个是<Engine name="Catalina" defaultHost="localhost">

改成<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

另一个后面改成tomcat3

 

然后加上

<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"

                                                        mcastBindAddress="127.0.0.1"

                        address="228.0.0.4"

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                                               tcpListenAddress="127.0.0.1"

                      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>      

这个是session复制用的不需要session复制的可以不用

 

最后一步

在需要session复制的程序里面的web.xml里加上

 

  <distributable />

 

 

 

Session粘性,一般用到粘性就不用sesssion复制了

只需要在httpd.conf里最后一段加上

ProxyRequests Off

ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 

ProxyPassReverse / balancer://cluster/ 

<proxy balancer://cluster>

 

BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomcat3

 

BalancerMember ajp://127.0.0.1:8020 loadfactor=1 route=tomcat2

 

</proxy>

就行了。

分享到:
评论

相关推荐

    window+apache+tomcat的集群

    window apache tomcat的集群 window+apache+tomcat的集群

    window+apache+tomcat的集群整合

    window+apache+tomcat的集群整合 Apache是http服务器,我们可以利用它对tomcat进行负载均衡.

    tomcat+apache实现集群/负载均衡

    通过以上步骤,一个简单的基于Apache和Tomcat的集群/负载均衡环境就在Windows系统中搭建完成了。需要注意的是,实际部署中可能还需要考虑更多的因素,如故障转移、安全策略以及监控等,以确保整个系统的高可用性和...

    Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现

    本教程将探讨如何在Windows环境下,利用Nginx作为反向代理和负载均衡器,与Tomcat应用服务器配合,搭建一个负载均衡和集群环境。这种配置能够提升系统的稳定性和处理能力,确保即使在服务器压力大的情况下,也能为...

    Nginx+Tomcat负载均衡

    最近学习Nginx+tomcat实现 负载均衡。 首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把...

    轻松实现windows平台Apache_Tomcat集群和负载均衡.doc

    Apache Tomcat集群和负载均衡是提高Web应用程序性能和可用性的关键策略。通过在Windows平台上配置Apache HTTP Server与多个Tomcat实例协同工作,可以有效地分散用户请求,避免单一服务器过载,确保服务的连续性和...

    apache tomcat集群

    以下是关于Apache Tomcat集群的一些关键知识点: 1. **集群概念**:在Web服务器集群中,多个服务器共享应用程序状态和用户会话,以实现故障转移、负载分担和扩展性。在Tomcat中,集群可以通过网络通信来同步session...

    Nginx+Tomact集群部署

    ### Nginx+Tomcat集群部署详解 #### 一、Nginx与Tomcat简介 在深入了解Nginx+Tomcat集群部署之前,我们先简要回顾一下这两款软件的基本功能。 - **Nginx**:是一款高性能的HTTP服务器及反向代理服务器,同时也是...

    Nginx_Tomcat集群案例

    windowXP下搭建nginx-1.7.10和apache-tomcat-8.0.18的集群 已经配置好,下载后直接启动三个tomcat和nginx,然后访问http://localhost/即可。

    Apache Tomcat_Window平台_三层架构部署.doc

    - 集群配置可以在高并发或故障转移场景下提高服务的可用性和性能,通过负载均衡策略将请求分发到不同的Web服务器节点。 2. App Server(应用服务单点或集群): - App Server处理Web Server转发过来的业务逻辑,...

    apache-tomcat-9.0.65-windows-x64.zip

    4. **Cluster**:如果配置了集群功能,Tomcat可以实现负载均衡和故障转移,以提高可用性和可扩展性。 5. **Manager**:这是一个Web应用程序管理工具,允许用户通过浏览器界面来部署、卸载或更新应用程序。 6. **...

    Apache-tomcat-8.5.32(Window64位)

    6. **Cluster**:Tomcat支持集群,可以将负载分布到多个服务器,实现高可用性和故障转移。 7. **Security**:Tomcat提供了多种安全特性,包括SSL/TLS支持、 Realm(认证域)配置、角色为基础的安全权限管理等。 ...

    Tomcat8/window/64

    10. **集群和负载均衡**:Tomcat支持集群配置,可以将请求分发到多个服务器,提高可用性和扩展性。 总之,Tomcat 8是Java Web开发的重要基础设施,无论是在学习还是实际工作中,理解和掌握其工作原理及配置技巧都是...

    apache-tomcat-6.0低版本配合MyEclipse

    10. **集群与负载均衡**:虽然Tomcat 6.0不是设计用来做大型集群部署的,但可以通过修改`conf/server.xml`文件配置多个`&lt;Engine&gt;`、`&lt;Host&gt;`和`&lt;Connector&gt;`元素,实现简单的负载均衡和故障转移。 总之,Apache ...

    Window+Nginx.doc

    3. **Tomcat集群+Redis的Session共享** —— 更稳定高效,推荐使用。 这里以第二种方式进行配置。在每个Tomcat的server.xml中启用SimpleTcpCluster,使Tomcat能够进行Session复制。 总之,通过以上步骤,我们可以...

    官方原版apache-tomcat-9.0.33-windows-x64.zip

    Apache Tomcat是一款开源的Java应用服务器,主要用于运行Java Servlet和JavaServer Pages(JSP)技术。这个"官方原版apache-tomcat-9.0.33-windows-x64.zip"是Apache Tomcat的第9.0.33版本,专为64位Windows操作系统...

    Apache(64位)

    在【描述】中提到的“apache-tomcat集群部署”,是指在多个Apache Tomcat服务器上配置和管理应用以实现负载均衡、高可用性和故障切换。Apache Tomcat是一款流行的Java Servlet和JavaServer Pages (JSP)容器,常与...

    apache-tomcat-8.0.26-windows-x86

    5. **Cluster**:对于高可用性和负载均衡需求,Tomcat提供集群功能,允许在多个服务器之间共享会话和其他数据。 6. **WebDAV**:Tomcat可以通过WebDAV协议支持远程管理Web应用程序,这使得开发者可以远程部署和更新...

    tomcat-8.5.50-windows-x64.zip

    10. **集群与负载均衡**:Tomcat支持集群配置,可以在多个实例间实现 session 复制和故障转移,提高可用性和性能。配合负载均衡器,可以将请求分发到多个Tomcat实例。 总之,"tomcat-8.5.50-windows-x64.zip"提供了...

Global site tag (gtag.js) - Google Analytics