Apache+Tomcat负载均衡两种session共享方式的设置

转载 2015年11月20日 10:03:12

session共享有两种方式:

1、session共享,多个服务器session拷贝保存,一台宕机不会影响用户的登录状态;

2、请求精确集中定位,即当前用户的请求都集中定位到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则等同于单点部署,会丢失;

apache中针对上述两个方法提供了不同的配置项:

 sessionreplication:会话复制,即上述的方法一;

 sessionsticky:会话不复制,即上述的方法二;

-------------------------------

 

选取Apache HTTP Server作为前端的负载服务器,后端选取两个Tomcat作集群。

一、采用粘性Session

这种方式将同一用户的请求转发到特定的Tomcat服务器上,避免了集群中Session的复制,缺点是用户只跟一种的一台服务器通信,如果此服务器down掉,那就废了。
采用的model为mod_proxy_ajp.so,整个配置在tomcat的配置文件中都有相关的注释,只需作相应修改就OK。
我们选取的是Apache HTTP Server2.2.4,Tomcat5.5.16。
首先安装Apache HTTP Server,然后修改其配置文件http.conf,首先load三个model,代码如下:

LoadModuleproxy_module modules/mod_proxy.so
LoadModuleproxy_ajp_module modules
/mod_proxy_ajp.so
LoadModuleproxy_balancer_module modules
/mod_proxy_balancer.so
然后在此配置文件末端加入以下代码:
ProxyPass/ balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5maxattempts=3  
ProxyPassReverse/balancer://tomcatcluster/   
  
<Proxybalancer://tomcatcluster>  
BalancerMemberajp://localhost:8009route=a  
BalancerMemberajp://localhost:9009 route=b
</Proxy>

以上代码配置了Proxy的相关参数,<Proxy>模块定义了均衡负载的配置,其中两个TomcatServer都配置在同一台服务器上,端口分别为8009、9009,并配置各自的route,这样ApacheServer就能根据route将请求转发给特定的Tomcat。
接下来修改Tomcat的server.xml文件,如下:
<!-- Define an AJP 1.3 Connector on port 8009-->
    
<Connectorport="8009"
               enableLookups
="false"redirectPort="8443" protocol="AJP/1.3" />
其中的port为前面<Proxy>中设定的端口,还要配置其route,代码如下:
<!--Define the top level container in ourcontainer hierarchy -->
    
<Enginename="Catalina" defaultHost="localhost" jvmRoute="a">
jvmRoute也须同前面的设置一样。

下面用JMeter对配置后的负载均衡做一测试,首先先启动两个Tomcat Server,随后启动ApacheServer,在JMeter中新建测试计划,在两个TomcatServer中的jsp-examples下新建test.jsp(此jsp自己随便写两句就成),然后进行测试,以下是部分取样器结果:
HTTPresponse headers:
HTTP/1.1200 OK
Date:Wed, 11 Jul 2007 02:17:55 GMT
Set-Cookie:JSESSIONID=AC7EF1CAA8C6B0FEB68E77D7D375E2AF.b;Path=/jsp-examples
Content-Type:text/html;charset=ISO-8859-1
Content-Length:3
Keep-Alive:timeout=5, max=79
Connection:Keep-Alive

以上红色代码表示用户的http请求中的JSESSIONID中已经附带了route后缀,.b表示此请求将转发到route为b的TomcatServer上,你将会发现其中的一部分请求的JSESSIONID后缀为.a,也就是转发给route为a的TomcatServer上。

 

二、采用Session复制

修改apache http server配置文件http.conf,首先load三个model,代码如下:

LoadModuleproxy_module modules/mod_proxy.so
LoadModuleproxy_ajp_module modules
/mod_proxy_ajp.so
LoadModuleproxy_balancer_module modules
/mod_proxy_balancer.so

然后在此配置文件末端加入以下代码:

ProxyPass/ balancer://tomcatcluster/

ProxyPassReverse/balancer://tomcatcluster/   
  
<Proxybalancer://tomcatcluster>  
BalancerMemberajp://localhost:8009route=a  
BalancerMemberajp://localhost:9009 route=b
</Proxy>

接下来修改Tomcat的server.xml文件,如下:
<!-- Define an AJP 1.3 Connector on port 8009-->
    
<Connectorport="8009"
               enableLookups
="false"redirectPort="8443" protocol="AJP/1.3" />
其中的port为前面<Proxy>中设定的端口,还要配置其route,代码如下:
<!--Define the top level container in ourcontainer hierarchy -->
    
<Enginename="Catalina" defaultHost="localhost" jvmRoute="a">

jvmRoute也须同前面的设置一样。
另外,还需要在tomcat中将以下配置打开:

 <ClusterclassName="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                expireSessionsOnShutdown="false"
                useDirtyFlag="true"
                notifyListenersOnReplication="true">

           <Membership
               className="org.apache.catalina.cluster.mcast.McastService"
               mcastAddr="228.0.0.4"
               mcastPort="45564"
               mcastFrequency="500"
               mcastDropTime="3000"/>

           <Receiver
               className="org.apache.catalina.cluster.tcp.ReplicationListener"
               tcpListenAddress="auto"
               tcpListenPort="4001"
               tcpSelectorTimeout="100"
               tcpThreadCount="6"/>

           <Sender
               className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
               replicationMode="pooled"
               ackTimeout="15000"
               waitForAck="true"/>

           <ValveclassName="org.apache.catalina.cluster.tcp.ReplicationValve"
                  filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                  
           <DeployerclassName="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                     tempDir="/tmp/war-temp/"
                     deployDir="/tmp/war-deploy/"
                     watchDir="/tmp/war-listen/"
                     watchEnabled="false"/>
                     
           <ClusterListenerclassName="org.apache.catalina.cluster.session.ClusterSessionListener"/>
       </Cluster>
最后,要在我们的应用程序里的web-inf下的web.xml文件<web-app>元素的最后加上:<distributable/> 。


Apache+Tomcat负载均衡两种session共享方式的设置

session共享有两种方式: 1、session共享,多个服务器session拷贝保存,一台宕机不会影响用户的登录状态; 2、请求精确集中定位,即当前用户的请求都集中定位到一台服务器中,...
  • jl506269268
  • jl506269268
  • 2014年03月01日 18:05
  • 460

Apache+Tomcat负载均衡两种session共享方式的设置之一粘性会话

本文的测试环境为windows xp session共享有两种方式: 1、请求精确集中定位,即当前用户的请求都集中定位到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则...
  • shuzui1985
  • shuzui1985
  • 2012年08月25日 18:37
  • 2694

Apache+Tomcat负载均衡两种session共享方式的设置之二复制会话

本文的测试环境为windows xp 参考文档: Apache+Tomcat负载均衡两种session共享方式的设置 基于mod_proxy+Apache 2.2.16+Tomcat 7...
  • shuzui1985
  • shuzui1985
  • 2012年08月25日 20:11
  • 2183

基于Apache+Tomcat负载均衡的两种实现方法

http://yijiu.blog.51cto.com/433846/1435995 基于Apache+Tomcat负载均衡的两种实现方法 2014-07-08 1...
  • xiangbq
  • xiangbq
  • 2016年08月19日 17:44
  • 1035

使用apache+tomcat 负载均衡 session共享

我的环境:centos6.4    使用软件:(apache相关)apr-1.5.1.tar.gz,apr-util-1.5.4.tar.gz,pcre-8.36.tar.gz,httpd-2.2....
  • imzzyhello
  • imzzyhello
  • 2015年01月07日 15:50
  • 475

Apache + Tomcat做负载均衡的几种方式

服务器架构基础:使用apache+tomcat做负载均衡
  • mymailmjj_1984
  • mymailmjj_1984
  • 2016年01月19日 08:34
  • 5392

Apache+Tomcat 负载均衡+session共享

1.     下载并安装管理apache,进行安装;下载mod_jk.so插件,下载后放在apache安装路径的modelues目录下。 2.     下载session共享所需要的jar包,放在t...
  • u011976187
  • u011976187
  • 2015年03月27日 14:02
  • 272

apache+tomcat集群 负载均衡 session共享

主要是两步:第一:使用apache配置tomcat集群实现负载均衡 第二:配置实现session共享...
  • linhuchong_blog
  • linhuchong_blog
  • 2016年12月15日 10:22
  • 188

负载均衡-session共享的三种处理方法

首先,扫下盲,什么是负载均衡?  百度百科给出的解释是:负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和...
  • qq_34125349
  • qq_34125349
  • 2017年11月12日 22:24
  • 235

解决nginx负载均衡的session共享问题

查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享 PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session...
  • xluren
  • xluren
  • 2013年11月25日 21:05
  • 69151
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apache+Tomcat负载均衡两种session共享方式的设置
举报原因:
原因补充:

(最多只允许输入30个字)