用Redis存储Tomcat集群的Session

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

前段时间,我花了不少时间来寻求一种方法,把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机、对使用用户零影响。

我的设想是使用集群来搞定,通过通知负载均衡Nginx,取下集群中的Tomcat节点,然后对Tomcat上的应用进行升级,再通知负载均衡Nginx,把Tomcat节点重新加载上去。依次这么做,把集群中的所有Tomcat都替换一次即可。

那么问题来了,在取下Tomcat节点和加载新Tomcat节点时如何做到对用户无影响呢?方法很简单,共享Session。
下面,我们用实例来说明此方案。我们的例子使用了一台Nginx做负载均衡,后端挂接了两台Tomcat,且每台Tomcat的Session会话都保存到Redis数据库中。其中,Nginx配置为non-sticky运行模式,也即每一个请求都可以被分配到集群中的任何节点。当要上线新代码时,只需简单地取下Tomcat实例,此时所有的访问用户会被路由到活动的Tomcat实例中去,而且由于会话数据都是保存在Redis数据库中,所以活跃用户并不会受影响。当Tomcat更新完毕,又可以把此节点加入到Nginx中。

安装Nginx

# sudo rpm -ivh nginx-1.4.2-1.el6.ngx.x86_64.rpm

修改配置文件/etc/nginx/nginx.conf,并添加下面的内容:

http {upstream tomcat  {        server localhost:8080;        server localhost:8081;    }include       /etc/nginx/mime.types;default_type  application/octet-stream;

修改配置文件/etc/nginx/conf.d/default.conf并替换location部分的内容:

location / {    proxy_pass  http://tomcat;  }

重启Nginx

# sudo service nginx restart

接下来,安装两个Tomcat实例。由于我们是在同一台服务器上做的演示,要让两台Tomcat不发生冲突,需要修改第二个Tomcat实例的端口号。由于Nginx配置为non-sticky运行模式,对每个请求采用的是Round-robin负载均衡方式,这意味着它会为每个请求都抽奖一个新会话。

接着,下载并安装Redis。步骤省略,很简单。

最后,我们需要配置Tomcat,让Tomcat把会话Session保存到Redis数据库。

我们要使用tomcat-redis-session-manager这样的第三方库,主页见:

https://github.com/jcoleman/tomcat-redis-session-manager

要注意此库并非开箱即用的,使用时需要做一些调整。你需要下载源码,并在更新了依赖库的版本后,重建项目。比如我使用了commons-pool2-2.2.jar和jedis-2.6.1.jar依赖库。要记住把这些jar文件复制到每一个Tomcat实例的lib子目录下。

在更新了commons-pool、jedis和tomcat版本这些库后,你可以使用build.gradle来构建整个项目。构建完毕后,复制新生成的tomcat-redis-session-manager-1.2.jar到每一个Tomcat实例的lib子目录下。并在修改每一个Tomcat实例的context.xml配置文件:

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

重启Tomcat实例。可以检查到Redis确实保存了Tomcat的会话。然后我们对Tomcat实例取下或恢复时,访问用户确实没受影响。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

用Redis存储Tomcat集群的Session相关推荐

  1. 用Redis存储Tomcat集群的Session(转载)

    本文转自http://blog.csdn.net/chszs/article/details/42610365 感谢作者 前段时间,我花了不少时间来寻求一种方法,把新开发的代码推送到到生产系统中部署, ...

  2. Nginx+Tomcat+Memcached实现tomcat集群和session共享

    Nginx+Tomcat+Memcached实现tomcat集群和session共享 [http://blog.csdn.net/shimiso/article/details/8979044] 为什 ...

  3. MSM实现tomcat集群的session共享

    本文首发于我的个人网站: https://hewanyue.com/ 本文作者: Hechao 本文链接: https://hewanyue.com/blog/6254cc16.html 会话保持起源 ...

  4. Tomcat集群及Session共享

    Tomcat集群 由于单台Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大时,单台Tomcat是扛不住的,这个时候,就需要搭建Tomcat的集群,而目前比较流行的做法就是通 ...

  5. Nginx+tomcat集群的session共享问题

    请求负载过程中会话信息不能丢失.那么需要在多个tomcat中session需要共享.所以需要进行相关问题的解决 配置Tomcat的session共享可以有三种解决方案: 第一种:是以负载均衡服务器本身 ...

  6. 通过memcached来实现对tomcat集群中Session的共享策略 .

    近期在做一套集群的实现,实现的方案是在Linux下完成对Apache + Tomcat 负载均衡的功能. 但是实现了该集群后,发现登陆系统后,每次都会被拦截回登录页面,造成该现象的原因是Session ...

  7. 基于tomcat集群做session共享

    前端代理服务器nginx:192.168.223.136 tomcat服务器:采用的一台多实例192.168.223.146:8081,192.168.223.146:8082(如何构建多实例tomc ...

  8. Tomcat集群和Session共享的配置方法

    Tomcat集群配置其实很简单,在Tomcat自带的文档中有详细的说明( /docs/cluster-howto.html ),只不过是英语的,对我这样的人来说很难懂 . 下面根据说下怎么配置吧: 第 ...

  9. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持 ...

最新文章

  1. 英特尔收购Movidius背后:为什么我们需要一款专门的CV处理芯片?
  2. 20、Power Query-数据合并、拆分
  3. [云炬创业学笔记]第一章创业是什么测试2
  4. linux进程调度周期,Linux进程组调度机制学习
  5. PHP Cookbook读书笔记 – 第16章互联网服务
  6. 浮点加法器计算机组成原理,计算机组成原理 第二章运算方法与运算器
  7. Golang——map集合初始化、键值操作、map作为函数参数的使用
  8. error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
  9. maven学习(1)
  10. 直播软件APP源码,一套完整的直播软件源码解决方案
  11. mcgs组态软件中字体如果从左到右变化_MCGS脚本程序 (2)
  12. 快手火山美拍秒拍抖音映客yy小影视频批量下载毛驴保存去水印助手
  13. 防止ARP欺骗的方法!!!
  14. 2011戴尔计算机配置,机型与配置(一)
  15. 提升交互设计必备的28本好书
  16. 【MP】MybatisPlus教程
  17. HDU 1873 - 看病要排队 ← 优先队列
  18. Excel的Sumif函数
  19. Linux下基于GTK人脸识别界面设计
  20. 前端--HTML入门

热门文章

  1. vlan 间路由+单臂路由(实验思路讲解+配置)
  2. php周日,PHP减去一周周日
  3. CAS自旋锁到底是什么?为什么能实现线程安全?
  4. 微信小程序开发---页面生命周期
  5. GIT关联本地仓库与远端仓库
  6. node deno_Deno手册:带有代码示例的TypeScript运行时教程
  7. react leaflet_如何使用React Leaflet和Leaflet Gatsby Starter设置自定义Mapbox底图样式
  8. react 生命挂钩_角生命周期挂钩:ngOnChanges,ngOnInit等
  9. db2 本地db 到实例_如何登录到FreeCodeCamp的本地实例
  10. 前端中心化管理API使用说明