Nginx+Memcached+Tomcat session会话共享

服务器说明:

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. </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包下载

时间: 2024-12-09 21:29:52

Nginx+Memcached+Tomcat session会话共享的相关文章

Tomcat+Memcached+Nginx实现session会话共享

环境: ip hostname software version OS port 192.168.1.120 nginx-proxy-master.gz01 nginx-1.8.1 CentOS Linux release 7.4.1708 (Core)  80 192.168.1.136 tomcat-node01.gz01 apache-tomcat-8.5.53 CentOS Linux release 7.4.1708 (Core)  8080 192.168.1.137 tomcat-

tomcat session会话保持实验-之Nginx+tomcat+memcached

tomcat session会话保持实验-之Nginx+tomcat+memcached 实验要求 1.nginx+tomcat 负载均衡 2.memcached 会话保持 实验拓扑   ip网络规划 Nginxnode2:172.16.76.20 tomcatAnode3:172.16.76.30  memcached tomcatBnode4:172.16.76.40  memcached 基础配置   node2 [[email protected]~]# yum install ngin

nginx+memcached+tomcat集群 session共享完整版

nginx+memcached+tomcat集群 session共享完整版 集群环境 1.nginx版本 nginx-1.6.2.tar.gz 2.jdk 版本 jdk-7u21-linux-x64.tar.gz 3.tomcat 版本  7.0.29 4.memcached 版本 memcached-1.4.22.tar.gz 5. CentOS 6.5 系统采用一台服务做测试 一.nginx安装 安装依赖包 yum -y install gcc gcc-c++ 1.安装pcre库 tar z

Nginx + Memcached 实现Session共享的负载均衡

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

实战项目memcached+tomcat+session+nginx在工作中的应用和配置

环境介绍:公司根据实际需要搭建一个购物网站,当用户购物时可以 将不同商品,放到同一个购物车中进行同时付款. 环境的搭建: 外网用户  IP地址:1.1.1.1  主机名:fanxiaohui  用户访问网站http://www.taobao.com 使用nginx实现负载均衡,由于网页是用JAVA开发的所以选用tomcat搭建网站服务,由于用户在购物时http是一个无状态的协议,不同的商品都是一个新的连接,默认不会把几个商品放到同一个购物车中,无法进行统一结账,为了能使服务器能够认识是同一个客户

Nginx+Memcached+Tomcat集群配置

1.   Nginx Nginx是通过将多个Web Server绑定到同一个IP地址下,以实现多个WebServer间的负载均衡,降低单个Web Server的负荷,以提高整体的性能与稳定性. 安装和配置Nginx的简单方式如下: 1)      下载并解压Nginx到本地目录:http://nginx.org/en/download.html 2)      对Nginx的配置主要是对它的配置文件/conf/nginx.conf的修改.如下链接是nginx.conf配置文件各个属性的详细说明:

redis缓存服务器(Nginx+Tomcat+redis+MySQL实现session会话共享)

一.redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现master-slave(主从)同步. Redis是一个高性能的key-valu

图文并茂超详细搭建redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享)

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会

tomcat cluster和tomcat+memcached实现Session会话保持

Tomcat Cluster: tomcat基于内存复制的集群,tomcat集群各节点通过建立tcp链接来实现session的复制,tomcat启动时,一个cluster对象(默认配置下是SimpleTcpCluster)会启动membership服务和Replication服务(用于建立tcp链接),membership服务记录了集群当前节点的信息,当一台节点接收http请求并产生一个新session时,调用Replication服务建立tcp连接把Session复制到membership列表