nginx+tomcat+redis实现session共享
原理介绍
什么是Session/Cookie
用户使用网站的服务,基本上需要浏览器与Web服务器的多次交互。HTTP协议本身是无状态的,当用户的第一次访问请求结束后,后端服务器就无法知道下一次来访问的还是不是上次访问的用户。我们需要基于HTTP协议支持会话状态的机制,这样的机制可以使Web服务器从多次单独的HTTP请求中知道哪些请求是来自哪个会话的。
这种架构的主要目的是 如果我们在一个网站上登录了账号和密码,登录成功的信息存放在后端服务器A上,那么如果我们刷新后,将会登录到服务器B上 这个时候,我们需要重新登录,如果做了session共享后,登录信息会缓存到redis中,我们就不需要重新登录了。登录的信息状态会进行缓存。
Session与Cookie的作用都是为了保持访问用户与后端服务器的交互状态。
环境准备
以下环境均为centos7
以下实验仅用于tomcat7、jdk7 (tomcat8见末尾)
nginx: 10.3.145.14
tomcat1: 10.3.145.58 多实例
redis: 10.3.145.55
nginx配置
nginx 反向代理,7层负载均衡配置upstream代理
配置文件中添加下列部分
vim /etc/nginx/nginx.conf
http {
upstream webapp {server 10.3.145.58:8080 weight=1 max_fails=1 fail_timeout=2s;server 10.3.145.58:8081 weight=1 max_fails=1 fail_timeout=2s;
}server {location / {proxy_pass http://webapp;}
}
配置两台tomcat轮循tomcat配置2-1.将jar包拷至lib目录(两台tomcat一样)2-2.修改配置文件(两台tomcat一样)# vim conf/context.xml (写在<Context>标签中)
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"host="127.0.0.1"port="6379"database="0"password="redis-password"maxInactiveInterval="1200"/>Redis集群配置方式
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"maxInactiveInterval="60"password="redis-password"sentinelMaster="mymaster"sentinels="127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382"
/>制作测试网页
cat webapps/ROOT/index.jsp<html><body bgcolor="green"> <center> #这一部分两台tomcat可设计成不同的颜色以区分<%= request.getSession().getId() %><h1>Tomcat 1</h1> #这一部分两台tomcat可以是不同的内容以区分</body></html>cat webapps/ROOT/index.jsp<html><body bgcolor=""> <center> #这一部分两台tomcat可设计成不同的颜色以区分<%= request.getSession().getId() %><h1>Tomcat 2</h1> #这一部分两台tomcat可以是不同的内容以区分</body></html>启动服务
redis配置安装# tar xf redis-4.0.8.tar.gz -C /usr/local/# cd /usr/local/redis-4.0.8/# make配置# vim redis.conf #将监听地址改为0.0.0.0启动服务# ./src/redis-server redis.conf &
关于TOMCAT8
[老方式](jcoleman/tomcat-redis-session-manager)
[新方式](mrhop/tomcat-redis-session-manager-8.5)
ps. 原作者已经停止更新,我们找到了新的方法重新编译新的包,其他的两个jar文件不需要改动。
gradle编译tomcat-redis-session-manager
[root@tomcat ~]# wget -N https://services.gradle.org/distributions/gradle-2.9-all.zip
[root@tomcat ~]# mkdir /opt/gradle
[root@tomcat ~]# unzip gradle-2.9-all.zip
[root@tomcat ~]# mv gradle-2.9 /opt/gradle/
[root@tomcat ~]# ln -sfn /opt/gradle/gradle-2.9 /opt/gradle/latest
[root@tomcat ~]# echo "export GRADLE_HOME=/opt/gradle/latest" > /etc/profile.d/gradle.sh
[root@tomcat ~]# echo "export PATH=\$PATH:\$GRADLE_HOME/bin" >> /etc/profile.d/gradle.sh
[root@tomcat ~]# . /etc/profile.d/gradle.sh# 查看gradle版本
[root@tomcat ~]# gradle -v
------------------------------------------------------------
Gradle 2.9
------------------------------------------------------------Build time: 2015-11-17 07:02:17 UTC
Build number: none
Revision: b463d7980c40d44c4657dc80025275b84a29e31fGroovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.8.0_144 (Oracle Corporation 25.144-b01)
OS: Linux 3.10.0-693.5.2.el7.x86_64 amd64
```
编译并打包tomcat-redis-session-manager
```shell
1. 克隆fork作者的源码
[root@tomcat ~]# git clone mrhop/tomcat-redis-session-manager-8.5
[root@tomcat ~]# cd tomcat-redis-session-manager-8.5-master2. 修改配置[root@tomcat ~]# vim build.gradle
**************************************
修改以下内容
"""
version = '2.0.0-8.5.32'dependencies {compile group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '8.5.32'compile group: 'redis.clients', name: 'jedis', version: '2.9.0'compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.4.2'
"""
# 执行$CATALINA_BASE/bin/version.sh查看tomcat版本,我这里是8.5.50
# jedis,我这边下载的版本是2.7.3
# commons-pool2,我这边使用的版本是2.4.2
**************************************3. 编译并打包
[root@tomcat ~]# gradle jar
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jarBUILD SUCCESSFULTotal time: 5.55 secsThis build could be faster, please consider using the Gradle Daemon: Chapter 18. The Gradle Daemon```编译完成[root@tomcat ~]# ls build/libs/
tomcat-redis-session-manager-8.5-2.0.0-8.5.5.jar
讲上面的包和其他的两个jar包放在tomcat的lib目录下
大功告成
nginx+tomcat+redis实现session共享相关推荐
- Nginx安装,Nginx静态缓存,Nginx Gzip压缩,Nginx负载均衡,Nginx方向代理,Nginx+Tomcat+Redis做session共享
Nginx安装 nginx-1.10.1.tar.gz安装,参考http://blog.csdn.net/tototuzuoquan/article/details/47381907. 修改nginx ...
- Nginx安装,Nginx静态缓存,Nginx Gzip压缩,Nginx负载均衡,Nginx方向代理,Nginx+Tomcat+Redis做session共享...
Nginx安装 nginx-1.10.1.tar.gz安装,参考http://blog.csdn.net/tototuzuoquan/article/details/47381907. 修改nginx ...
- Nginx+Tomcat+Memecached实现session共享配置
这段时间一直在搞项目部署,以前从来没做过,感觉很吃力,下面这个是自己配的Ubuntu下Nginx+Tomcat+Memecached实现session共享配置参考文档,欢迎大家拍砖,不知为啥sessi ...
- tomcat+redis实现session共享
注意:在实际应用中,发现该方案会不定期导致Tomcat假死(怀疑Redis连接未释放),慎用. 服务器192.168.14.132和192.168.14.133, 均已经安装tomcat,tomcat ...
- Nginx+Tomcat+Memcached实现session共享
实验环境: server1:nginx tomcat memcached server2:tomcat memcached Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入 ...
- nginx+tomcat+redis实现会话共享
1.环境准备(安装redis报错) nginx,两个tomcat,redis (因为测试全部安装在同一台) 安装redis: cd redis-4.0.9.tar.gz && cd r ...
- 单点登录实现(spring session+redis完成session共享)
一.前言 项目中用到的SSO,使用开源框架cas做的.简单的了解了一下cas,并学习了一下 单点登录的原理,有兴趣的同学也可以学习一下,写个demo玩一玩. 二.工程结构 我模拟了 sso的客户端和s ...
- Redis + Tomcat + Nginx 集群实现 Session 共享
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 蕃薯耀 链接 | www.cnblogs.com/fan ...
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
转载自 Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...
最新文章
- 有逼格的产品经理都用什么样的杯子?
- 计算机课件制作技能,经济论文写作PPT制作有哪些技巧?
- vue js 工具方法封装js 文件
- windows server 2012 初安装体验
- 计算机课堂教学改革培训心得体会,教学改革培训心得体会(精选3篇)
- [NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL
- C++结构体作为函数参数传参
- INITRANS和MAXTRANS参数的作用
- react native 0.50 源码解析 再出发 持续更新
- 正确学习PLC编程的方法
- 快速打造 Android 自定义表情库
- 【Scratch-声音模块】音量控制
- 程序员考公指南1-59
- 动态规划系列(4)——不相邻数最大和
- 2019公共课的【考研平均分】和难度系数公布!
- nrm 安装和 nrm命令
- 准独角兽已出现,火爆的隐私计算赛道谁是头部玩家?
- REST API 最佳实践 – REST 端点设计示例
- android 记事簿源码,安卓记事本源代码,详细。
- jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed...
热门文章
- 疑似苹果iPhone SE2手机最新渲染图曝光:后置单摄
- 首发量产1亿像素,小米新机宣布11月5日发布!
- 支付分当钱花有人信了?微信辟谣:开通微信支付分不收费
- 快手联合创始人银鑫卸任A站法定代表人、董事、经理
- 鸿蒙系统是噱头和谈判策略?华为梁华:是针对IoT的操作系统
- 产业链加入爆料行列!2019年新iPhone:外形无变化 后置摄像头升级
- 力压华为小米!安兔兔1月安卓性能榜第一名是它!
- 40岁老码农面试京东被淘汰,HR感叹:40岁混不到高管,都会被清退
- java webservice 客户端_Java Webservice客户端(最佳方法)
- php性能测试xhprof,PHP性能分析之Xhprof的使用