2019独角兽企业重金招聘Python工程师标准>>>

一、工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案:

  1、使用数据库来存储Session

  2、使用Cookie来存储Session

  3、使用Redis来存储Sesssion

  4、使用Tomcat的session复制

  5、使用Memcached来存储Session

二、本文中主要讲一下第3种方案,也就是使用Redis来存储Session,Github中已经有该开源组件(Tomcat-redis-session-manager),下面讲一下配置的步骤:

  1、环境准备

    Tomcat7 下载地址:http://tomcat.apache.org/download-70.cgi

    Tomcat-redis-session-manager 下载地址:http://pan.baidu.com/s/1bokMOVH

    本文使用的Nginx来做的Tomcat集群。

Nginx安装参考:Linux Centos 6.5_x86安装Nginx

    Redis安装参考:转:Centos6.5_x86安装Redis

  2、配置tomcat配置文件context.xml

<!-- host="192.168.159.129"       Redis地址 --><!-- port="6379"                  Redis端口 --><!-- password="123456"            Redis密码 --><!-- database="0"                 存储Session的Redis库编号 --><!-- maxInactiveInterval="60"     Session失效的间隔(秒) --><Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />        <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="192.168.159.129"       port="6379"                 password="123456"            database="0"                 maxInactiveInterval="60" />

注:

  1)Manager节点中的className属性为必选项,其它均为可选项

  2)maxInactiveInterval设置不生效,暂时找不到原因,在部署中发现Session失效的间隔一直都是读取tomcat/conf/web.xml中的session-config节点中配置的session-timeout属性值,且都是以秒为单位,(这个地方maxInactiveInterval好像不起作用,和web.xml中配置的session-config优先级有关?)

  3、添加Tomcat-redis-session-manager的jar包到tomcat/lib目录下,需要的jar包如下:

    commons-pool2-2.2.jar
    jedis-2.5.2.jar
    tomcat-redis-session-manage-tomcat7.jar

3、在nginx中配置负载均衡,配置文件为nginx.conf

http {upstream myServer {server 192.168.1.2:8080;server 192.168.1.3:8080;}server {listen 80;server_name localhost;location / {proxy_pass http://myServer;}}}

 配置完后,访问localhost的请求都将被转发到192.168.1.2:8080以及192.168.1.3:8080中去,可以在Jsp页面中打印一下Session Id验证一下:

  Session Id : <%= request.getSession().getId() %>

  如果在同一个浏览器页面上不断刷新访问,SessionId的值不变化的话,说明配置正确,此时获取的是同一个Session对象。

   也可以通过redis客户端连接到Redis库中直接查看:查看会显示有 “56E2FAE376A47F1C0961D722326B8423” key的 session 数据,value为序列化数据。

  

  注:

  1)GitHub中该开源组件(Tomcat-redis-session-manager)的主页:https://github.com/jcoleman/tomcat-redis-session-manager

  2)该组件目前不支持Tomcat8,我用的是Tomcat 7.0.68版本

  3)在程序中将对象放到Redis里时,该对象必须实现java.io.Serializable接口,否则将报错,如果对象中有其它对象的引用,该引用对象也需实现java.io.Serializable接口,所以在使用request.getSession().setAttribute()方法时,一定要注意一下这一个细节。

  4)因为要把Tomcat-redis-session-manager的jar包放到Tomcat/lib中,对Tomcat的部署造成了侵入,可以使用Spring Session来替代,spring-session使用拦截器重新包装了request从而替换session实现

  5)因为所有集群的Tomcat中配置的Redis地址是一个,如果Redis崩溃了,那么Session就不可用了,所以需要部署Redis集群,实现故障自动切换,高可用的目标。

  keepalived+redis 高可用redis主从解决方案

文章参考自:

    1.https://my.oschina.net/kolbe/blog/618167

    2.http://www.cnblogs.com/lengfo/p/4260363.html

转载于:https://my.oschina.net/ydsakyclguozi/blog/3014775

使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享相关推荐

  1. Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署

    文章目录 Redis 下载地址 Redis 5.x 单节点 编译安装 Redis 启停 Redis Cluster 4.x VS Redis Cluster 5.x 演进之路 ( Master/Sla ...

  2. 集群部署中解决定时任务重复执行的问题-redis分布式锁应用

    背景描述 有小伙伴私信我,关于存在定时任务的项目在集群环境下部署如何解决重复执行的问题,PS:定时任务没有单独拆分. 概述:之前的项目都是单机器部署,所以定时任务不会重复消费,只会执行一次.而在集群环 ...

  3. NAT集群部署solo之session server

    author:JevonWei 版权声明:原创作品 使用Nginx做代理服务器,部署solo,使用session server做会话黏滞 拓扑图 环境 tomcatA 172.16.253.108 t ...

  4. Redis的安装配置及简单集群部署

    最近针对中铁一局项目,跟事业部讨论之后需要我们的KF平台能够接入一些开源的数据库,于是这两天研究了一下Redis的原理. 1. Redis的数据存储原理及简述 1.1Redis简述 Redis是一个基 ...

  5. Redis(3.2.3)集群部署实战

    一.Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis官网地址:http://red ...

  6. Apache+Tomcat +mod_proxy集群负载均衡及session

      序言: 在玩Apache+Tomcat +mod_jk集群负载均衡及session的时候发现,还有一种方式可以实现,就是网上各位大牛们说的mod_proxy反向代理. 实在弄的我的知识细胞洋洋.实 ...

  7. 50 Tomcat 集群部署

    文章目录 1.JVM基本介绍 2.Tomcat是什么,与Nginx的区别. 3.Tomcat安装.配置.启动 4.Tomcat的HTTP请求过程 4.使用tomcat部署web服务 5.使用tomca ...

  8. tomcat集群部署

    tomcat集群部署 1 创建2个 tomcat 2 将 tomcat 官网文档的配置示例复制到 server.xml文件中 3 修改 server.xml 文档中的参数配置 3.1 Cluster ...

  9. Nginx+Tomcat集群部署

    为了获取更好的性能,我们常常需要将tomcat进行集群部署.下文通过nginx转发实现tomcat集群,并通过nginx-upstream-jvm-route插件保证session的粘滞. 应用场景环 ...

最新文章

  1. 使用fork并发处理多个client的请求和对等通信p2p
  2. 数据结构笔记 递推与迭代
  3. 微信小程序客服消息使用指南
  4. NTFRS事件ID:13568
  5. 疫情之下,将业务迁移至云端会是一个正确的选择吗?
  6. python 读取wav 音频文件的两种方式
  7. C#序列化和反序列化
  8. 符合语言习惯的Python优雅编程技巧
  9. Oracle 日常开发记录
  10. neo4j limit
  11. 速成pytorch学习——5天nn.functional 和 nn.Module
  12. ambari 搭建hadoop大数据平台系列4-配置ambari-server
  13. Java面向对象总复习-QuickHit
  14. 综合布线实训室建设方案(完整版)
  15. 飞桨PaddlePaddle 英特尔神经计算棒 联合优化AI算法CPU部署性能,推动产业低成本智能化升级
  16. 茴香豆的“茴”有几种写法?单例模式你知道有几种写法?
  17. 【复】一次流量分析经历
  18. (java)Climbing Stairs
  19. docker——Ubuntu镜像操作和apache web容器操作小实训
  20. 经典WEB项目之宠物商店(一)

热门文章

  1. vscode里面如何配置库_VSCode中C/C++库文件的配置
  2. mysql约束与外键_MySQL 外键与约束
  3. JAVA_HOME系统环境变量
  4. react 动态修改路由_reactjs – 如何动态添加重定向到反应路由器?
  5. 牛客小白月赛12 H 华华和月月种树 (离线dfs序+线段树)
  6. 远程连接mysql库问题
  7. trade-off 翻译
  8. cerely异步分布式
  9. Codeforces Round #420 E
  10. Nginx的nginx.conf配置文件中文注释说明