J2EE集群性能优化点滴(ngixn+servlet server+memcache)
废话少说,进入正题。
清单:
jar包 5个
jsp测试页面 1个
Nginx 配置文件1个
Tomcat Server.xml 配置文件 2个
前置条件,需要安装以下软件:
Tomcat 服务器 2台+
Nginx 服务器 1台
Memcached 1台
JDK1.5+
IE/Firefox 浏览器
一、下载下列几个 Jar包
http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar
http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar
http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar
http://spymemcached.googlecode.com/files/memcached-2.4.2.jar
http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar
将以下几个Jar包Copy到 $TOMCAT_HOME/lib目下,每个Tomcat节点都需要有。
二、配置Tomcat的Server.xml配置文件,样本可以点击这里下载,主要内容如下:
http://www.javabloger.com/images/2010-05/webcluster/server.xml.txt
<Context docBase="D:\webapp" path="" reloadable="true" >
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"
/>
</Context>
每个Tomcat的节点都需要修改。
三、前端分发的Ngixn的配置文件也需要修改,样本可以点击这里下载,主要内容如下:
http://www.javabloger.com/images/2010-05/webcluster/nginx.conf.txt
#gzip on;
upstream www.docyeah.com {
server 192.168.1.103:81;
server 192.168.1.103:82;
}
最后访问测试的JSP页面,进行刷新:
http://www.javabloger.com/images/2010-05/webcluster/msem.jsp.txt
页面上出现:SessionID:292621C48C4D6B27F40290039081492A-n1 一直不变,说明你经过前端 Ngixn 进行分发,跳转到任何一台服务器都是从Memcached中读取session,这样web容器中的 session就集中在一个地方了。并且每台机器都可以进行计算客户端发出的请求,实现了session共享和压力分载,下图中显示了每台Tomcat容器中打印了各打印了2次 Hello World,说明分散的计算了客户端发出的请求。
采用这种方案的优势在于,如果最前端换成IP策略的负载均衡,例如:LVS、Iptables,或者HA-Proxy 都可以,并且可以提高前端负载均衡器的工作效率。通过这样的思路,还可以进行对这个工具进行改写成向数据库写入的方案。
相关文章:
一个 J2EE集群下山寨架构
–end–

本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。
评论
Comment from H.E.
Time 2010年07月8日 at 10:21 上午
1,你的是通过前端负载均衡(nginx)请求到tomcat上的吗?
2. 2个tomcat下的Memcached的插件有没有配好?
Comment from misgarlic
Time 2010年10月1日 at 5:30 下午
您好, 我建置了兩台 tomcat, 加入了以下的程式碼
前端使用了 haproxy, 在兩台 round robin 時, session id 雖然是一樣的,
但是 session 的值似乎只能儲存在自己的那台 server, 並不會統一存到 memcached 去
是我那邊有設定錯了嗎
Comment from h.e.
Time 2010年10月2日 at 10:12 上午
haproxy 有http和tcp模式转发,我这里主要是说tcp模式,另外你说的现象我认为session存放Memcached的配置可能没有生效。
Comment from zzhuz
Time 2012年02月21日 at 5:38 下午
这文章是转过来的吧?memcached-session-manager不支持jdk1.5
Comment from H.E.
Time 2012年02月22日 at 11:38 上午
100%原创!所有文章无一转载,谢谢。







Comment from dk
Time 2010年07月7日 at 12:01 下午
均衡负载成功了 请教一下,怎么我得到的 sessionID 不断得变化 ? 没有成功从 memcache 获取session对象吗