由于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 

会显示:

然后:

set abc

出现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="" 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=""
database=""
maxInactiveInterval="" />

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

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

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

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

fallback: 服务挂了是否访问其他机器

domain: 访问域名, 默认不配置

path; cookie路径, 默认不配置

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

需要浏览器开启cookie, 才可以使用

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

系列来自尚学堂极限班

最新文章

  1. 单片机DA转换实现正弦波
  2. iOS一些编译运行问题
  3. webservice理解
  4. CCF 最大的矩形
  5. MySql 分页
  6. [ActionScript 3.0] AS3 获取某年某月的天数(Get number of days in a month)
  7. python functools.wraps装饰器模块
  8. Linux Tomcat 自启动
  9. Java_String_01_由转义字符串得到其原本字符串
  10. es6 语法 (map、set和array 的对比)
  11. xml实体注入学习
  12. Docker 操作记录
  13. 人人开源分模块,非原生html报错,很难查找问题所在,有vue语法
  14. 构建BSP (boardsupport packet)
  15. 详解一下 javascript 中的比较
  16. IDEA 笔记汇总
  17. Linux kernel kfifo分析【转】
  18. eclipse中maven插件,改变默认仓库位置
  19. 2017 Multi-University Training Contest - Team 5——HDU6095&amp;&amp;HDU6090&amp;&amp;HDU
  20. Safe Or Unsafe--hdu2527(哈夫曼树求WPL)

热门文章

  1. Quartus II中使用脚本转换sof到rbf文件
  2. [ajax] quick double or multiple click ajax submit cause chrome explorer&#39;s error snatshot
  3. Python2.7升级至Python3.6
  4. GeoServer中配置GeoWebCache切片缓存目录
  5. SSD测试第一神器——FIO
  6. 探索TFS Git 库文件换行(CRLF)的处理方式
  7. 仿建设银行APP首页效果
  8. [ASP.NET].NET逻辑分层架构总结
  9. web窗体ListView配置分页
  10. (C#)冒泡排序