会话一致性解决(sesion一致)

由于Tomcat使用的为集群, 通过nginx访问时轮询不同的tomcat, 使得session无法统一, 所以将session单独抽取出来做共享session。

此tomcat版本为 7.0.61.tar.gz  刚开始用7.0.75对他来说版本太高了, 一直包异常!!!!!!

首先打开两台tomcat, 使用nginx进行反向代理, 修改 CATALINA_HOME/conf/server.xml

#tocmat01中配置
<Engine name="Ca.." def.. jvmRoute="tomcat1">
#tomcat02中配置
<Engine name="Ca.." def.. jvmRoute="tomcat2">
#tomcat03中配置
<Engine name="Ca.." def.. jvmRoute="tomcat3">

此时通过页面取值

<html lang="en"> <h1>tomcat_01</h1> sessionId: <%=session.getId()%> sessionIP: <%=request.getServerName()%> </html>

可在浏览器中看到sessionId的变化

关于session共享有四种方案

1), tomcat广播, 对系统资源占用较大, 占用io流, 不推荐使用

2), 使用memcache

3), 使用redis, 安装第三方库, 

4), 使用tengine的cookie一致性解决

本文只讲后面三种方式

 2, 使用memcached作为session管理

2.1) 安装memcached

yum -y install memcached

2.2) 测试memcached是否安装成功, 使用telnet, 没有的话yum安装

telnet localhost 11211

会显示: 

会话一致性解决(sesion一致)

然后: 

set abc 0 0 5 12345

出现STORED表示memcached安装成功

2.3) tomcat下安装jar, 拷贝到 CATALINA_HOME/lib 目录下, 

会话一致性解决(sesion一致)

2.4) 更改tomcat配置

vim ./conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.208.102:11211" sticky="false" lockingMode="auto" sessionBackupAsync="false" sequestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

之后启动tomcat, 既可以看到sessionID已经不变了

 3, 使用redis解决session一致性问题

配置和memcached基本类似

3.1) 安装redis

yum install redis

启动

service redis start

3.2) 修改reids.conf 中的 bind, 否则只能使用localhost访问

vim /etc/redis.conf bind 192.168.208.102

3.3), 在 CATALINA_HOME/conf/context.xml 中添加配置

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

3.4) 将redis和tomcat的session-manager jar包导入

会话一致性解决(sesion一致)

此时启动tomcat, 就可以完成session一致性问题了

4, 使用tengine的会话保持功能实现

tengine提供了cookie保持功能, 即客户端访问一台服务器后, 始终指向该台服务器, 相当于粘滞功能

会话一致性解决(sesion一致)

此种情况, 分配的那台tomcat挂了以后, 就不能狗保持回话一致了, 因此并不为一种可靠的解决方案。

此外, 使用memcached或redis时, 如果不想安装插件, 可在代码中直接操作缓存来存储和取出数据, 相当于session, 为一种比较可靠的一致性解决方案

CentOS 7下Nginx服务器的安装配置 

CentOS上安装Nginx服务器实现虚拟主机和域名重定向 

CentOS 6.8 安装LNMP环境(Linux+Nginx+MySQL+PHP) 

Linux下安装PHP环境并配置Nginx支持php-fpm模块 

Nginx服务的SSL认证和htpasswd认证 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a8ac393b51ae492b5eea5eb554396cff.html