nginx+tomcat集群的session一致性和会话保持
2017-03-02 00:00
483 查看
#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
###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添加配置
和memcached类似
为什么需要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类似
相关文章推荐
- tomcat原理及安装及反向代理、会话保持、session集群和session共享服务器的实现(一)
- tomcat cluster和tomcat+memcached实现Session会话保持
- (二)apache+tomcat集群+session会话同步 推荐
- Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
- nginx+tomcat集群,session共享
- Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
- Tomcat(三) Tomcat安装配置: Tomcat+Nginx+keepalived 实现动静分离、Session会话保持的高可用集群
- Linux高可用(HA)之Nginx+Redis+Tomcat集群实现session保持和共享
- tomcat集群会话保持
- nginx+tomcat会话保持
- Linux(CentOS)下Nginx+Tomcat集群+Redis共享Session搭建
- nginx+tomcat集群负载均衡(实现session复制)
- CentOS7 Nginx+Redis+Tomcat集群实现session保持和共享
- 集群中的session共享存储 实现会话保持
- Linux高可用(HA)之Nginx+Redis+Tomcat集群实现session保持和共享
- 实现tomcat基于session会话保持
- 基于tomcat集群会话保持(DeltaManager)
- nginx+tomcat集群负载均衡(实现session复制)
- 基于tomcat集群会话保持
- tomcat集群机制剖析-tomcat的session会话共享方式