J2EE集群性能优化点滴(ngixn+servlet server+memcache)

31 五月, 2010 (00:35) | J2EE服务器, 架构设计 繁体 English    DeliciOus    分享到新浪微博
作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.javabloger.com/article/ngixn-j2ee-tomcat-memcache-session-share.html
豆瓣读书 向你推荐有关 J2EE服务器架构设计、 类别的图书。

 废话少说,进入正题。

清单:
  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 都可以,并且可以提高前端负载均衡器的工作效率。通过这样的思路,还可以进行对这个工具进行改写成向数据库写入的方案。

如图所示:
http://www.javabloger.com/images/2010-05/webcluster/Ngixn-j2ee-tomcat-memcache-session-share_s.jpg

查看大图请点击这里
 

相关文章:
一个 J2EE集群下山寨架构

–end–

 

豆瓣读书  向你推荐有关 J2EE服务器 架构设计、 类别的图书。



Creative Commons License
本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。

评论

Comment from dk
Time 2010年07月7日 at 12:01 下午

均衡负载成功了 请教一下,怎么我得到的 sessionID 不断得变化 ? 没有成功从 memcache 获取session对象吗

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 xysoul_云龙
Time 2012年07月3日 at 5:19 下午

您好:我是所有软件都在一台机子上测试的,效果能出来,两个tomcat 能用两台物理机吗,如果可以,那么d:\webapp 怎么设置,memcache需要做什么样的设置, 假如两个tomcat只能一台物理机,这样做的意义是什么,不是太明白,非常感谢与期待您的指教

Comment from xysoul_云龙
Time 2012年07月3日 at 10:25 下午

您好,我安装您的文档也测试了一下,在一台物理机上测试,效果能出来,想问一下tomcat能不能用两台物理机,那样的话,例如D:\webapp 的jsp文件怎么放, 一台机子上两个tomcat 用memcache 的意义呢,我问的可能有点弱, 只是现在有点不太明白,请您多多赐教,非常感谢

评论

评论也是有版权的!




3200