由于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
会显示:
然后:
set abc 0 0 5 12345
出现STORED表示memcached安装成功
2.3) tomcat下安装jar, 拷贝到 CATALINA_HOME/lib 目录下,
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包导入
此时启动tomcat, 就可以完成session一致性问题了
4, 使用tengine的会话保持功能实现tengine提供了cookie保持功能, 即客户端访问一台服务器后, 始终指向该台服务器, 相当于粘滞功能
此种情况, 分配的那台tomcat挂了以后, 就不能狗保持回话一致了, 因此并不为一种可靠的解决方案。
此外, 使用memcached或redis时, 如果不想安装插件, 可在代码中直接操作缓存来存储和取出数据, 相当于session, 为一种比较可靠的一致性解决方案
CentOS 7下Nginx服务器的安装配置
CentOS 6.8 安装LNMP环境(Linux+Nginx+MySQL+PHP)