Apache+Tomcat实现负载均衡及集群(session同步)--五、session同步(2)使用共享文件

默认tomcat的session是存储在内存中的,当tomcat关闭时,session会存储到文件系统中,这里使用NFS共享文件系统,将不同tomcat服务器上的指定目录共享,然后将tomcat的session持久化到指定目录,达到同步的效果。
NFS的安装及配置这里就不详述了,网上有很多教程,可以查看这篇博客
需要注意的是,在CentOS6以上,portmap已经改名了,可以安装portreserve,如果使用rpm安装,启动命令为service rpcbind start
在192.168.137.16服务器上搭建NFS服务,创建/opt/shared目录作为共享目录
编辑/etc/exports文件,将 /opt/shared目录共享给另外两台服务器,具有读写权限



启动NFS
192.168.137.211以及 192.168.137.243作为客户端,分别创建/opt/shared/tomcat/session,tomcat的session存储到该目录
客户端挂载共享目录


 
在context.xml文件中加入如下配置:

<Context>
 <Manager className="org.apache.catalina.session.PersistentManager"
   maxActiveSession="-1"
   minIdleSwap="0"
   maxIdleSwap="0"
   maxIdleBackup="0">
  <Store className="org.apache.catalina.session.FileStore" directory="/opt/shared/tomcat/session"/>
 </Manager>
</Context>
 
无论是tomcat的conf/context.xml,还是在web应用shade的META-INF目录下创建context.xml文件,都行
默认tomcat的session管理器是StandardManager,该管理器将session存储在内存中,当tomcat关闭时,将session持久化到work目录下,tomcat重启后,重新加载到内存,这里使用 PersistentManager改变session的存储位置
maxActiveSession:产生的最大活动session数。如果为-1,说明没有限制。
minIdleSwap:自上次访问某个session到session可以被保存到存储介质上,并从服务器的内存中交换出来之间的时间间隔。如果为-1,说明可以在任何时间交换出来。指定值应该小于maxIdleSwap。缺省情况下这个特征是disable的
maxIdleSwap:自上次访问某个session到session应该被保存到存储介质上,并从服务器的内存中交换出来之间的时间间隔。如果为-1,则disable这个特征。如果使能了这个特征,指定值应该大于或者等于maxIdleBackup。缺省情况下这个特征是disable的
maxIdleBackup:自上次访问某个session到这个session可以被保存到存储介质上的时间间隔。以秒为单位,如果为-1,则disable这个特征。缺省情况下,这个特征是disable的
启动tomcat后测试,发现并没有什么卵用,同一个页面,多次刷新,每次的sessionid都不相同
tomcat的session还是存储在内存中的,只是在session数量超过 maxActiveSession或是访问间隔时间满足minIdleSwap、maxIdleSwap才会被换出内存,存储到指定的文件,并没有实时同步
而且,tomcat集群数量多了以后,文件共享也会比较麻烦,在集群数量比较少,性能要求不是很高的情况下可以使用这种方式,提高系统可用性,另外,使用文件共享,可以解决文件上传同步的问题,比如,文件上传请求被某台tomcat处理后,一般文件会存储到应用服务器的本地目录,如果有其他请求下载上传的文件,恰好被其他服务器处理,就访问不到上传的文件,使用文件共享是解决方式之一。还是那句话,少量服务器集群、并发访问不高的时候可以使用这种方式,如果并发访问比较高,就需要专门的服务器了。

猜你喜欢

转载自ywu.iteye.com/blog/2247440