Tomcat集群解决方案

来源:互联网 发布:xp桌面壁纸软件下载 编辑:程序博客网 时间:2024/06/09 16:31


          笔者所在公司由于业务性质(不允许单机故障发生),所有应用都需要集群分布式部署。那么对于Tomcat集群如何保持并同步各Tomcat服务器的Session状态,下面提供四种解决方案:

1、使用tomcat自带的cluster集群方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率、性能比较低,在大并发下表现并不好,不建议。

2、利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。

3、用nginx插件实现tomcat集群和session同步,nginx-upstream-jvm-route-0.1.tar.gz,是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能,可通过http://code.google.com/p/nginx-upstream-jvm-route/downloads/list获取。

4、利用memcached把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。笔者所在公司采用的就是这种方案。


        上面第四种解决方案的集群环境是:

 

1、nginx版本为:nginx-1.6.3

2、tomcat版本为:apache-tomcat-7.0.50

3、memcached版本为:memcached-1.4.3.tar.gz 

4、 session复制同步使用jar包memcache-session-manager版本:memcached-session-manager-1.6.3.jar

5、操作系统环境为:centos6.5


具体操作有以下几点要注意:

1、session复制同步需要用到的jar包(需要放到tomcat的lib文件夹下),在笔者的GitHub地址:

 https://github.com/meiyang1990/jar-tomcat-nginx-memcached.git
2、修改tomcat的conf目录下的context.xml文件,添加上以下一段内容:
<?xml version='1.0' encoding='utf-8'?><Context>    <WatchedResource>WEB-INF/web.xml</WatchedResource> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"       memcachedNodes="n1:127.0.0.1:11211"       sticky="false"       lockingMode="auto"       sessionBackupAsync="false"         sessionBackupTimeout="1000"        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>
      好了!


       


0 0