`
kaowww153
  • 浏览: 74555 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

tomcat apache session粘性配置和session复制配置

阅读更多

好早前配置了负载均衡和session复制,今天写出来备忘。

方案:
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>

就行了。

 

分享到:
评论

相关推荐

    tomcat的session共享所需jar包

    4. **基于JNDI的会话复制(JNDI Replication)**:利用Java命名和目录接口(JNDI)进行session的分布式存储和复制。这种方式适用于大型集群,但配置复杂,且需要额外的JNDI服务支持。 要实现这些机制,Tomcat通常会...

    tomcat .apache2.0集群配置资料

    综上所述,配置Apache2.0和Tomcat的集群涉及到多个层面,包括服务器配置、网络架构、负载均衡策略以及应用优化等。正确实施这些步骤将有助于构建一个高可用、高性能的Web服务环境。对于初学者来说,这是一个很好的...

    Tomcat集群Session共享所有文件.zip

    4. **JVM间Session复制**:Tomcat通过配置`&lt;Manager&gt;`元素的`className="org.apache.catalina.session.ManagerBase"`,开启跨JVM的Session复制。每个服务器都保存全部Session,但可能会导致内存资源的浪费。 5. **...

    apache+tomcat+memcached

    - 非粘性Session:负载均衡器将Session复制到多个Tomcat实例,即使部分实例失效,Session数据仍能被其他实例访问。 5. MSM配置 - MSM支持粘性与非粘性Session策略,这里采用非粘性策略,通过负载均衡器实现...

    apache-tomcat配置指南.pdf

    Apache Tomcat是一个开源的Web服务器和Servlet容器,由Apache软件基金会负责开发。它实现了Java Servlet和JavaServer Pages (JSP)规范,用于处理Java代码。Tomcat可以部署在不同的操作系统上,如Windows和Linux。它...

    apache2.2+tomcat6集群配置

    Apache2.2与Tomcat6集群配置是一种常见的Web服务架构,用于提高网站的可用性和可扩展性。在Windows环境下,这种配置可以实现负载均衡,确保即使单个服务器出现故障,整个系统仍然能继续运行,同时分散请求以降低单一...

    tomcat-redis-session-manager-tomcat-7.zip

    2. **下载和配置Tomcat-Redis-Session-Manager**:获取`tomcat-redis-session-manager-tomcat-7`压缩包,并将其解压到Tomcat的`lib`目录下。这个库包含了Tomcat的Redis会话管理器实现。 3. **修改Tomcat配置**:在`...

    Apache2.2+tomcat7+jk+jdk1.6

    在"Apache2.2+tomcat7+jk+jdk1.6"的配置中,session组播复制和粘性session是解决session共享问题的核心策略。Session组播复制是指当一个用户在集群中的某个节点创建或更新session时,这个session的信息会被广播到...

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

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    Apache+Tomcat集群

    Apache和Tomcat是两种常用的Web服务器和应用服务器。Apache主要处理静态内容,而Tomcat则专用于运行Java Servlet和JavaServer Pages(JSP)应用程序。将它们结合使用,可以构建高性能、高可用性的Web服务集群,以...

    Tomcat 集群 redis 会话管理器 java 客户端 .zip

    支持Apache Tomcat 7Apache Tomcat 8Apache Tomcat 9Apache Tomcat 10下载最新版本(4.0)旧版本Maven 配置&lt;repository&gt; &lt;id&gt;repsy&lt;/id&gt; &lt;name&gt;tomcat-cluster-redis-session-manager-repo&lt;/name&gt;

    精通Apache的Tomcat 6.rar

    7. **集群与负载均衡**:讨论了如何配置Tomcat集群,实现高可用性和负载均衡,包括Session复制和粘性会话。 8. **集成其他服务**:涵盖了与Apache HTTP Server、 mod_jk或mod_proxy的集成,以利用Apache的特性,如...

    shiro 新手鼓捣了一天终于搞好了。。还差个分布式session

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了企业级应用的安全实施。在本文中,我们将深入探讨 Shiro 的基本概念以及如何与 SpringMVC 集成,同时会简要提及...

    解决session不同问题所需jar包

    针对上述描述中的"jar包",可能是一个实现了Session复制或集中存储功能的库,比如`Tomcat8`本身支持的`manager`模块,或者其他第三方解决方案如`Apache Tomcat Clustering`,它可以实现跨服务器的Session共享。...

    tomcat-cluster-redis-session-manager:Tomcat集群Redis会话管理器Java客户端

    在这里,会话被实现为非粘性的(意味着,每个请求都可以转到集群中的任何服务器,这与Apache提供的Tomcat集群设置不同。) 请求会话将立即存储到Redis中(会话属性必须是可序列化的),以供其他服务器使用。 当...

    apache+Tomcat负载平衡设置详解

    这个配置创建了两个 AJP 连接的 worker(worker1 和 worker2),以及一个负载平衡器(loadbalancer),使用轮询策略,并保持会话粘性,以确保相同客户端的连续请求被发送到同一台 Tomcat 服务器。 总结来说,Apache...

    Nginx tomcat mybatis 集群部署

    - **基于Cookie的粘性Session**:通过设置特定的Cookie来确保用户始终被定向到同一台服务器。 - **Nginx Session Sticky Module**:利用Nginx的Session Sticky模块来实现Session的粘性路由。 #### 三、Nginx的部署...

Global site tag (gtag.js) - Google Analytics