nginx+tomcat集群的session一致性和会话保持

#session一致性和会话保持 为什么需要session一致性?

因为我们用nginx来搭建tomcat集群,那么多个tomcat之间session应该一致,如果session不一致那么用户可能需要多次登录,例如我第一访问某电商网站登录的是Atomcat,过了一会再访问,访问的Btomcat,那么我可能需要多次登录,这就比较麻烦了。那么为了解决这个问题,我们可以把session放到memcached和redis中,来实现会话保持。

##首先使用memcached来实现 ###1,安装memcached内存数据库 yum –y install memcached

测试安装是否成功

启动:service memcached start

可以用telnet localhost 11211

Set abc 0 0 5

12345

get abc

###2.web服务器连接memcached的jar包拷贝到tomcat的lib asm-3.2.jar
kryo-1.04.jar
kryo-serializers-0.11.jar
memcached-session-manager-1.7.0.jar
memcached-session-manager-tc7-1.8.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.7.0.jar
reflectasm-1.01.jar
spymemcached-2.7.3.jar

###3.修改server.xml里面修改Engine标签(这一步只是为了测试使用) 添加jvmRoute属性,目的是查看sessionid里面带有tomcat的名字,就是这里配置的jvmRoute

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

###4.配置tomcat的conf目录下的context.xml <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.17.9:11211" sticky="false" lockingMode="auto" sessionBackupAsync="false" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> 配置memcachedNodes属性,配置memcached数据库的ip和端口,默认11211,多个的话用空格隔开 目的?让tomcat服务器从memcached缓存里面拿session或者是放session ###5.修改index.jsp,取sessionid看一看 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html lang="en"> SessionID:<%=session.getId()%> </br> SessionIP:<%=request.getServerName()%> </br> <h1>tomcat1</h1> </html> Tengine有一种解决办法,就是nginx记录一个连接的访问状态,如果某个用户在Atomcat登录了。那么他下次访问的时候还让他去A tomcat,就解决了session一致性的问题,这种就是会话保持。 Tengine解决这个问题,是使用cookie来解决的。访问的时候带着cookie过来,那么tengine就知道去访问那个tomcat。如果cookie禁用了。就会出现问题,所以企业一般还是使用memcached或redis来解决一致性问题。 ##使用redis来实现session一致性

安装redis缓存数据库,
修改配置文件vi /etc/redis.conf
将bind的127.0.0.1修改为本机地址,否则只能本机访问了

导入redislib中三个jar包到tomcat中, commons-pool2-2.4.2.jar
jedis-2.8.0.jar
tomcat-redis-session-manager1.2.jar
在tomcat添加配置

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         host="192.168.17.4"
         port="6379"
         database="0"
         maxInactiveInterval="60" />

和memcached类似

转载于:https://my.oschina.net/zhanggong/blog/849859

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值