Dubbo入门到精通学习笔记(十八):使用Redis3.0集群实现Tomcat集群的Session共享
文章目录
- 1、单节点访问http://192.168.1.61:8082/pay-web-boss/:
- 2、增加多一个消费者节点:192.168.1.62,以同样的方式部署pay-web-boss工程。
- 3、在Keepalived+Nginx组成的反向代理集群中的两个节点同步增加如下两处配置:
- 4、重启Nginx
- 5、通过反向代理集群的VIP访问pay-web-boss时,有时可以登录成功,但有时又会提示验证码错误,原因就是Session没有同步。
- 6、下载
- 7、下载
- 8、添加Tomcat的环境变量 (可选)
- 9、配置 redis.properties , 集群中的IP:端口用都好隔开,打开Redis集群模式
- 10、在Tomcat7中的 conf/context.xml 中增加如下两行配置:
- 11、在Tomcat的conf/web.xml中核对确认Tomcat的Session超时时间,默认为30分钟。
- 12、重新启动tomcat集群,用vip访问,发现集群使用正常,不会再出现原来会话不同步的现象。
本文内容参考龙果学院《基于Dubbo的分布式系统架构实战》课程内容,以课程中所提供的简易版支付系统中的运营管理系统 pay-web-boss 项目为例
Tomcat版本:Tomca7
1、单节点访问http://192.168.1.61:8082/pay-web-boss/:


2、增加多一个消费者节点:192.168.1.62,以同样的方式部署pay-web-boss工程。
先验证新增节点也可正常访问http://192.168.1.62:8082/pay-web-boss/


3、在Keepalived+Nginx组成的反向代理集群中的两个节点同步增加如下两处配置:
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
## FastDFS Tracker Proxy
upstream fastdfs_tracker {
server 192.168.1.131:8000 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.132:8000 weight=1 max_fails=2 fail_timeout=30s;
}
## web-boss
upstream web_boss {
server 192.168.1.61:8082 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.62:8082 weight=1 max_fails=2 fail_timeout=30s;
}
## FastDFS Cluster
server {
listen 88;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
## FastDFS Proxy
location /dfs {
root html;
index index.html index.htm;
proxy_passhttp://fastdfs_tracker/;
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 300m;
}
## web-boss Cluster
location /pay-web-boss {
root html;
index index.html index.htm;
proxy_passhttp://web_boss/pay-web-boss;
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100m;
}
}
}
注意配置中的## web-boss和## web-boss Cluster
4、重启Nginx
# /usr/local/nginx/sbin/nginx -s reload
5、通过反向代理集群的VIP访问pay-web-boss时,有时可以登录成功,但有时又会提示验证码错误,原因就是Session没有同步。
http://192.168.1.50:88/pay-web-boss/login_operatorLogin.action
http://192.168.1.51:88/pay-web-boss/login_operatorLogin.action
http://192.168.1.52:88/pay-web-boss/login_operatorLogin.action
上面两个单独访问没问题。
nginx代理后,虚拟ip50,代理51和52两个机器上的tomcat,两个tomcat的session是不同步的,输入验证码之前和之后是走的两个服务器。

接下来就是要解决Tomcat的Session共享问题,使用开源项目:
https://github.com/ran-jit/TomcatRedisClusterEnabledSessionManager
注意,因为我们使用的是Redis3.0集群,相应的插件一定要支持Redis3.0集群。Redis集群地址,请看《Dubbo视频教程–高可用架构篇–第05节–Redis集群的安装(Redis3+CentOS)》
1
92.168.1.111:7111
192.168.1.112:7112
192.168.1.113:7113
192.168.1.114:7114
192.168.1.115:7115
192.168.1.116:7116
6、下载
https://github.com/ran-jit/TomcatRedisClusterEnabledSessionManager/archive/master.zip
解压,找到lib目录中的
jedis-3.0.0-SNAPSHOT.jar
commons-pool2-2.2.jar
commons-logging-1.1.jar
并将这3个jar包上传到Tomcat7中的 lib 目录
7、下载
https://github.com/ranjit/TomcatRedisClusterEnabledSessionManager/releases/download/1.0/TomcatRedisSessionManager-1.0.zip
(当前是1.0,如果出最新版,你们要同步更新到最新版)
解压后得到:TomcatRedisSessionManager-1.0.jar 和 redis.properties

将 TomcatRedisSessionManager-1.0.jar 上传到Tomcat7中的 lib 目录
8、添加Tomcat的环境变量 (可选)
catalina.home="/home/wusc/edu/web/boss-tomcat"
9、配置 redis.properties , 集群中的IP:端口用都好隔开,打开Redis集群模式
# redis hosts ex: 127.0.0.1:6379, 127.0.0.2:6379, 127.0.0.2:6380, ....
redis.hosts=192.168.1.111:7111,192.168.1.112:7112,192.168.1.113:7113,192.168.1.114:7114,192.168.1.115:7115,192.168.1.116:7116
# Redis Password
redis.password=
# set true to enable redis cluster mode
redis.cluster.enabled=true
配置好之后把 redis.properties 上传到 Tomcat7的 conf目录
注意:此插件支持单节点的Redis,也支持Redis集群,只需要在redis.properties中配置则可。
如果是单节点:redis.hosts=改为一个,redis.cluster.enabled=false即可
原来的TomcatRedisSessionManager-1.0.jar中有redis.properties,和我们现在的是不一样的,建议直接将上面刚刚修改的redis.properties这个文件替换掉TomcatRedisSessionManager-1.0.jar里面的jar包
将TomcatRedisSessionManager-1.0.jar上传到Tomcat7中的lib目录中,注意:因为TomcatRedisClusterEnabledSessionManager项目大家在使用的过程中可能需要做一些自定义的修改工作,在本视频中将和大家讲解如何对项目源码修改后进行全新导打包。
就是在eclipse中import 项目TomcatRedisClusterEnabledSessionManager(git上下载的),然后做修改,修改后,通过export 选择jar,给jar命名为TomcatRedisSessionManager.jar
10、在Tomcat7中的 conf/context.xml 中增加如下两行配置:
//这两行的顺序不能改变
<Value className="com.r.tomcat.session.management.commons.SessionHandlerValue"/>
<Manager className="com.r.tomcat.session.management.redis.RedisSessionManager"/>
11、在Tomcat的conf/web.xml中核对确认Tomcat的Session超时时间,默认为30分钟。
<session-connfig>
<session-timeout>30</session-timeout>
</session-config>
可按需修改。
12、重新启动tomcat集群,用vip访问,发现集群使用正常,不会再出现原来会话不同步的现象。
启动过程中如果有关于dubbomonitor的错误不用管
期间关闭tomcat1或者tomcat2,再重新启动等操作,对用户的操作没有任何影响。
这样就能够实现平常的平滑升级,先关掉一个升级,再启动,再关闭一个,再启动,用户通过keepalived的vip方式访问感觉不到后端的变化。
Dubbo入门到精通学习笔记(十八):使用Redis3.0集群实现Tomcat集群的Session共享的更多相关文章
- Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)
文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...
- Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试
文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...
- Dubbo入门到精通学习笔记(十四):ActiveMQ集群的安装、配置、高可用测试,ActiveMQ高可用+负载均衡集群的安装、配置、高可用测试
文章目录 ActiveMQ 高可用集群安装.配置.高可用测试( ZooKeeper + LevelDB) ActiveMQ高可用+负载均衡集群的安装.配置.高可用测试 准备 正式开始 ActiveMQ ...
- Dubbo入门到精通学习笔记(十):dubbo服务集群 、Dubbo分布式服务子系统的划分、Dubbo服务接口的设计原则
文章目录 dubbo服务集群 Dubbo服务集群部署 Dubbo服务集群容错配置--集群容错模式 1.Failover Cluster 失败自动切换,当出现失败,重试其它服务器.`(缺省) 通常用于读 ...
- Dubbo入门到精通学习笔记(三):持续集成管理平台之SVN版本管理系统的安装和使用
文章目录 持续集成管理平台介绍 持续集成介绍 持续集成管理平台的组成 持续集成实践介绍 即将学习 SVN版本管理系统的安装 安装 Subversion + Apache 安装 jsvnadmin 简单 ...
- Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移
文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...
- Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍
文章目录 架构简单介绍 消息中间件在分布式系统中的作用介绍 消息中间件的定义 消息中间件的作用 应用场景 JMS(Java Message Service) JMS消息模型 实现了JMS规范的消息中间 ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
- Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡
文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...
随机推荐
- NTP时钟调整策略
一. 问题背景 天威视讯项目3月底发生了一次点播出现节目请求超时的情况,在查询故障的过程中,发现MAP服务器操作系统的时钟被向前调整了11秒,姑且不论是否是这个原因导致的故障,但每台服务 ...
- 测开之路三十九:js基础
js的两种使用方式 第一种使用方式:单独写js文件 在static下新建一个js文件并写入内容 alert('这是一个弹窗'); 在html文件里面,用script标签引入 <script sr ...
- ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- Vue 在手机上键盘把底部菜单顶上去的解决方案
Vue 在手机上键盘把底部菜单顶上去的解决方案 ios和安卓的键盘的区别 ios和安卓的键盘的区别弹起方式不同, ios直接弹出键盘, 不影响页面, 而安卓键盘弹起时会把页面顶起来, 这样就会把底部菜 ...
- ctDNA的分析理论上也可以为多样性的肿瘤
导语 肺腺癌(LUAD)和肺鳞癌(LUSC)是最常见的非小细胞肺癌类型.循环肿瘤DNA(ctDNA)是由凋亡或坏死的肿瘤细胞释放并在血液中循环的小片段DNA.与常规肿瘤活检相比,ctDNA检测具有一定 ...
- leetcode.双指针.680验证回文字符串-Java
1. 具体题目 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca&q ...
- HDU 6469 /// 二分
题目大意: 分裂怪有1到n种等级, 第1级的分裂怪称为原子怪,它不会分裂,被击杀时会产生a[1]点经验: 而第k级的分裂怪死亡时则会分裂成a[k]个第k - 1级的分裂怪. 一个体力可以杀死一个怪物. ...
- hdu 5435 A serious math problem
A serious math problem Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- Linux软件管理--RPM工具
目录 Linux软件管理--RPM工具 Rpm基础概述: Rpm包安装管理 Linux软件管理--RPM工具 Rpm基础概述: RPM全称RPM Package Manager缩写,由红帽开发用于软件 ...
- docker 运行jenkins及vue项目与springboot项目(二.docker运行jenkins为自动打包运行做准备)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...