【参考】Apache+Tomcat实现负载均衡及集群(session同步)--五、session同步(1)使用内存复制

打开tomcat的配置文件conf/server.xml,在主机Host元素中加入如下配置:

 

Xml代码  收藏代码

  1. <!-- 集群配置 -->  
  2.       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">  
  3.    <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>  
  4.    <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  5.     <!-- 配置membership服务,有规律的发送脉冲广播 -->  
  6.     <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>  
  7.     <!-- receiver组件,用于从其他成员接收复制的数据信息 -->  
  8.     <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"    
  9.       address="192.168.137.211" port="4001" autoBind="100" selectorTimeout="5000"    
  10.       maxThreads="6"/>  
  11.     <!-- sender组件,用于给组中其他成员发送复制的数据信息 -->  
  12.     <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  13.      <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  14.     </Sender>  
  15.     <!-- 消息处理组件,用于改变通道的操作行为 -->  
  16.     <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  17.     <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  18.    </Channel>  
  19.    <!-- 过滤器,过滤了任何对静态页面、图形、js的请求,这些请求不会修改会话 -->  
  20.    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>  
  21.    <!-- 过滤器,同mod_jk一起使用,在故障转移期间保证会话的粘性 -->  
  22.    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  23.    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"    
  24.      tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/"    
  25.      watchEnabled="false" />  
  26.    <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  27.    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  28.     </Cluster>  

 

两台tomcat的server.xml都做如上配置

 

注意事项:

1、无论Apache中是使用mod_jk还是使用mod_proxy,都应该关闭sticky session,如果是mod_proxy,还需要将nofailover属性的值置为Off,以下示例使用mod_proxy配置



 

2、tomcat的引擎Engine元素的jvmRoute属性去掉,如果加上,属性值会附加在session id的末尾,造成两次请求session id由于属性值不同而不同



 

3、两台tomcat的server.xml配置文件,Receiver元素的address属性值是不一样的,都是本机的ip



 

4、确保两台tomcat的4001端口是打开的,tomcat广播通信需要用到该端口,如果防火墙关闭了了该端口的访问,会出现如下问题

skipping state transfer. No members active in cluster group.

 

WARNING: Error receiving mcast package. Sleeping 500ms

java.net.SocketException: Socket closed

 at java.net.PlainDatagramSocketImpl.receive0(Native Method)

 at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:145)

 at java.net.DatagramSocket.receive(DatagramSocket.java:725)

 at org.apache.catalina.tribes.membership.McastServiceImpl.receive(McastServiceImpl.java:314)

 at org.apache.catalina.tribes.membership.McastServiceImpl$ReceiverThread.run(McastServiceImpl.java:414)

 

5、应用程序shade的web.xml中需要加入distributable元素



 

依次启动tomcat、Apache,分别用Firefox和chrome浏览

目前火狐中的请求被211这台机器处理



 

刷新下页面



 

发现请求被243这台tomcat处理了,但是session id并没有改变

关闭211机器上的tomcat,继续刷新页面,重复刷几次,发现请求都是被243处理,session id并没有改变

 

至此,使用内存同步方式配置session同步已经完成,但是,tomcat默认的session存储策略是存储在文件系统中,对于一些高并发的系统,这往往会限制系统的相应时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值