码迷,mamicode.com
首页 > 系统相关 > 详细

Nginx+Memcached+Tomcat session会话共享

时间:2016-10-29 21:27:27      阅读:391      评论:0      收藏:0      [点我收藏+]

标签:cmdb   zrc   vcs   代码   F12   cm4   pat   火狐   san   

服务器说明:

192.168.1.8 tomcat1 memcached(虚拟机1)

192.168.1.9 tomcat2(虚拟机2)

192.168.1.200 nginx (本机)

 

对于tomcat+nginx的配置请参考博客:【Nginx-反向代理服务器】实践篇(三)之Tomcat+Nginx搭建集群 

 

接下来我们来安装memcached,注意linux系统的用户权限问题

 

 

1.分别把memcached和libevent下载回来,放到/usr/src目录下:

         # cd /usr/src
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

 

技术分享

 

2.先安装libevent:

         # tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install

 

3.测试libevent是否安装成功:

          # ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3

4.安装memcached,同时需要安装中指定libevent的安装位置:

         # cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached 

 

5.测试是否成功安装memcached:

        # ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug

 

技术分享

 

6.启动memcache

 

       useradd   memcache   #添加memcache用户

        memcached -m 64 -d -u memcache -p 11211 -l 192.168.1.8 -c 5000 -P /tmp/memcached.pid

  或者 memcached -m 64 -d -u root -p 11211 -l 192.168.1.8 -c 5000 -P /tmp/memcached.pid

 

技术分享

 

注:再次启动时报了一个端口已占用,则kill掉memcache进程,然后二次启动时才成功。

 

技术分享

 

 

tomcat还需要额外配置如下:

 

 

tomcat 连接memcache session会话共享配置:session存储到192.168.1.8:11211 memcache里面。

 

vi  /usr/local/tomcat/conf/context.xml #将下面配置复制到<Context> 和 </Context>之间

两台主机做同样的配置

 

[html] view plain copy
 
 print?技术分享技术分享
  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
  2.         memcachedNodes="node1:192.168.1.8:11211"  
  3.                 requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"  
  4.                         sticky="false"  
  5.                                 storageKeyPrefix="context"  
  6.                                         lockingMode="uriPattern:/path1|/path2"  
  7.                                                 sessionBackupAsync="false"  
  8.                                                         sessionBackupTimeout="100"  
  9.                                                                 copyCollectionsForSerialization="false"  
  10.                                                                         transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>  
  11.   
  12.  </span>  

 

技术分享

 

说明:

 

这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如: 
 n1:localhost:11211 n2:localhost:11212     /localhost改为安装memcached的服务器的IP
sessionBackupTimeout的单位为分钟

 

当然配置完成后需要添加相应的jar包,将如下jar包分别放在两台tomcat的lib目录下即可。

 

技术分享

 

修改后重启两个TOMCAT和nginx即可,这个时候已经解决SESSION的共享问题

启动tomcat,并打印log,及时查看问题

 

技术分享

 

技术分享

 

 

测试Nginx和Tomcat

 

  测试Nginx是否实现负载均衡已经Tomcat能否共享session信息,分别在两个Tomcat服务器的\webapps\ROOT目录下新建两个test.jsp页面,内容如下:

 

Tomcat1

 

[html] view plain copy
 
 print?技术分享技术分享
  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>  
  2. SessionID:<%=session.getId()%>   
  3. <BR>   
  4. SessionIP:<%=request.getServerName()%>   
  5. <BR>   
  6. SessionPort:<%=request.getServerPort()%>   
  7. <%   
  8. out.println("This is Tomcat Server 1111111");   
  9. %>  
  10.  </span>  

 

Tomcat2

 

[html] view plain copy
 
 print?技术分享技术分享
  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>  
  2. SessionID:<%=session.getId()%>   
  3. <BR>   
  4. SessionIP:<%=request.getServerName()%>   
  5. <BR>   
  6. SessionPort:<%=request.getServerPort()%>   
  7. <%   
  8. out.println("This is Tomcat Server 2222222");   
  9. %></span>  



 

通过浏览器访问Nginx服务器,如下图将访问地址改成Nginx所在服务器。

反复刷新浏览器,如果SessionID一直不变,下面的SessionPort的内容在不断变化则说明配置成功。

 

测试结果如下:

 

技术分享

刷新浏览器

技术分享

 

再打开火狐浏览器看结果

 

技术分享

 

刷新火狐浏览器

 

技术分享

 

 

 

附:

1,当session未实现共享时,两台tomcat服务器权重比为1:1

效果:刷新浏览器,每次的sessionid均不同

技术分享

 

原因:当浏览器首次访问时,创建session,然后将sessionid存放到浏览器的cookie中,当浏览器再次刷新或者访问其他页面时,本地有sessionid,但是此时的请求被分发到另一台服务器上,本地带过去的sessionid在新的服务器上并找不到对应的session,故重新产生session。so 每次刷新都是不同的sessionid,session无法共享。

 

2,当session实现共享时,两台tomcat服务器权重比为1:1

效果:刷新浏览器,每次的sessionid不变,但是打印的This is tomcat server 值会变

技术分享

 

原因:当浏览器首次访问时,创建session,并将sessionId存到浏览器中,那么当用户再刷新浏览器或者访问其他页面时,我们客户端的请求会带上sessionid,然后我们通过sessionid去查找session,此时无论请求分发到哪个服务器上面,我们均可以找到session,因为我们将session存储到memcached服务器上了,故session不会重新创建,也就session共享了。

 

附所需jar包下载

Nginx+Memcached+Tomcat session会话共享

标签:cmdb   zrc   vcs   代码   F12   cm4   pat   火狐   san   

原文地址:http://www.cnblogs.com/haoyy/p/6011588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!