网站的集群部署动态部分可以采用tomcat的session复制功能,事实表明,在并发量达到一定数量级的情况下,用session复制功能会引起性能问题,这几天研究了下MSM的一个开源项目,本部署方式也基与此,主要解决:
- tomcat的单点故障问题;
- tomcat集群;
- nginx负责均衡,采用默认IP分发方式;
- 一个简单的web程序测试
测试环境:Linux CentOS版
步骤如下:
- 安装nginx;
- 在Linux的/usr/local下放置两个tomcat6,并修改相应的端口;
- 在Linux上安装MemCached最新版,启动memcached;
- 一个最简单的登录程序部署到tomcat6上,模拟登录;
- 修改Tomcat的server.xml,如下(其中memLogin为工程名):
- <Context path="/memLogin" docBase="memLogin" reloadable="true" source="org.eclipse.jst.jee.server:memLogin">
- <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
- memcachedNodes="n1:192.168.1.6:11211"
- sticky="false"
- lockingMode="auto"
- requestUriIgnorePattern=".*\.(swf|ico|png|gif|jpg|css|js)$"
- transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
- />
- </Context>
<Context path="/memLogin" docBase="memLogin" reloadable="true" source="org.eclipse.jst.jee.server:memLogin"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.6:11211" sticky="false" lockingMode="auto" requestUriIgnorePattern=".*\.(swf|ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>
测试过程(修改hosts文件,将www.test.com到192.168.1.6):
输入:http://www.test.com/memLogin,如下图:
登录后:
可以发现,目前用的是tomcat1,现在在Linux上关闭tomcat1,通过负载均衡让其使用tomcat2,看session是否能保持,关闭后,在当前页面刷新,如下图:
可以看到,现在已经使用tomcat2了,但session仍然保持着。
以上的部署过程基于nginx+tomcat6!