您的位置:首页 > 数据库 > Memcache

Nginx+Tomcat+Memcached集群Session共享

2013-11-08 13:15 507 查看
引言: 由于项目需要需要在跨域中共享session,于是就想到了msm开源项目。以下是我通过自己的实践配置成功的案例

环境:ubuntu12.04

            nginx/1.1.19 

            memecache version 1.4.13

            tomcat apache-tomcat-7.0.12  注:一台机器上运行两个实例

1.   首先安装nginx

              a.    ubuntu直接安装sudo apt-get install nginx 

              b.    源代码安装,参考:niginx安装

2.  修改nginx.conf从而来支持负载均衡

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
worker_connections 768;
# multi_accept on;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

sendfile on;
keepalive_timeout 65;

gzip on;
gzip_disable "msie6";

types_hash_max_size 2048;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

upstream 127.0.0.1 {  //支持负载均衡
server 127.0.0.1:8080 ;  //第一台tomcat实例
server 127.0.0.1:9090 ;  //第二台tomcat实例

}

server {
listen       80;           //nginx监听的端口
server_name  127.0.0.1;
charset utf-8;
location / {
root   html;
index  index.html index.htm;
proxy_pass    http://127.0.0.1; proxy_set_header  X-Real-IP  $remote_addr;
client_max_body_size  100m;
}

location ~ ^/(WEB-INF)/ {
deny all;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}
}
}


3.  安装memecache

                  1.  我用最简单的安装方式:sudo apt-get install memecache,当然你可以通过源码安装,注意:memecache是通过c语言进行开发的,并且他是基于libevent事件的,因此在源码安装的时候一定要先吧libevent程序库先按。

                  2.  注意:当你在启动memecache的时候要根据你项目的用户去启动,不能用root用户去启动,而tomcat启动确实别的用户,注意权限问题

4.  tomcat 配置

                  1.  使用memcached-session-manager这个开源项目(http://code.google.com/p/memcached-session-manager,下面简称msm)配置Tomcat和memcached实现session共享。

                   2. 我这里使用的是tomcat7所以使用的是memcached-session-manager-tc7-1.6.3 来进行,如果你用的是别的版本的tomcat请就具体包下载,注意:这里的tomcat版本与msm版本是决定你配置是否成功的关键。

                  3.  使用到的jar包如下:

                     a.  jar包下载地址 下载如下jar包,点击下载spymemcached-2.7.3.jar

                     b.  其他jar包可以从如下链接找到:http://code.google.com/p/memcached-session-manager/downloads/list
                            c.    如果大家懒得挨个去下,我提供了自己下载整理好的下载msm所需jar包

                   4.  下面修改Tomcat配置文件,让Tomcat结合memcached实现session共享

                                [root@localhost lib]# vi /usr/local/tomcat/conf/server.xml

                          在配置文件中加入如下内容:                                    

<Context docBase="/home/package/tomcat7-1" 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实例都需要添加<context>这个标签和这些lib包

这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如: 

 n1:localhost:11211 n2:localhost:11212     /localhost改为安装memcached的服务器的IP

sessionBackupTimeout的单位为分钟

/var/www/html改为Tomcat服务器web根目录的路径

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

5.  测试Nginx和Tomcat

  测试Nginx是否实现负载均衡已经Tomcat能否共享session信息,分别在两个Tomcat服务器的/var/www/html目录下新建两个test.jsp页面

Tomcat1

[root@localhost lib]# vi /home/package/tomcat7-1/test.jsp     /输入如下内容
SessionID:<%=session.getId()%>  <BR>
SessionIP:<%=request.getServerName()%>  <BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 111111!");
%>


Tomcat2
[root@localhost lib]# vi /home/package/tomcat7-1/test.jsp     /输入如下内容
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 222222!");
%>


通过浏览器访问Nginx服务器,访问地址改成Nginx所在服务器。因为我的nginx监听的是80端口,所以直接在浏览器中输入:http://localhost/test.jsp,就可以访问到nginx所代理的tomcat。
反复刷新浏览器,如果SessionID一直不变,下面的SessionPort的内容在不断变化则说明配置成功。同时可以查看你对应的memecache,通过stats items可以查看是否添加进了新的数据。

参考: msm原理:http://xylonwang.iteye.com/blog/1269704

             配置:http://blog.csdn.net/shimiso/article/details/8979044

                         http://blog.csdn.net/liuzhigang1237/article/details/8880752
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: