原理介绍

什么是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共享相关推荐

  1. 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 ...

  2. 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 ...

  3. Nginx+Tomcat+Memecached实现session共享配置

    这段时间一直在搞项目部署,以前从来没做过,感觉很吃力,下面这个是自己配的Ubuntu下Nginx+Tomcat+Memecached实现session共享配置参考文档,欢迎大家拍砖,不知为啥sessi ...

  4. tomcat+redis实现session共享

    注意:在实际应用中,发现该方案会不定期导致Tomcat假死(怀疑Redis连接未释放),慎用. 服务器192.168.14.132和192.168.14.133, 均已经安装tomcat,tomcat ...

  5. Nginx+Tomcat+Memcached实现session共享

    实验环境: server1:nginx tomcat memcached server2:tomcat memcached Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入 ...

  6. nginx+tomcat+redis实现会话共享

    1.环境准备(安装redis报错) nginx,两个tomcat,redis (因为测试全部安装在同一台) 安装redis: cd redis-4.0.9.tar.gz && cd r ...

  7. 单点登录实现(spring session+redis完成session共享)

    一.前言 项目中用到的SSO,使用开源框架cas做的.简单的了解了一下cas,并学习了一下 单点登录的原理,有兴趣的同学也可以学习一下,写个demo玩一玩. 二.工程结构 我模拟了 sso的客户端和s ...

  8. Redis + Tomcat + Nginx 集群实现 Session 共享

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 蕃薯耀 链接 | www.cnblogs.com/fan ...

  9. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    转载自  Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...

最新文章

  1. 有逼格的产品经理都用什么样的杯子?
  2. 计算机课件制作技能,经济论文写作PPT制作有哪些技巧?
  3. vue js 工具方法封装js 文件
  4. windows server 2012 初安装体验
  5. 计算机课堂教学改革培训心得体会,教学改革培训心得体会(精选3篇)
  6. [NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL
  7. C++结构体作为函数参数传参
  8. INITRANS和MAXTRANS参数的作用
  9. react native 0.50 源码解析 再出发 持续更新
  10. 正确学习PLC编程的方法
  11. 快速打造 Android 自定义表情库
  12. 【Scratch-声音模块】音量控制
  13. 程序员考公指南1-59
  14. 动态规划系列(4)——不相邻数最大和
  15. 2019公共课的【考研平均分】和难度系数公布!
  16. nrm 安装和 nrm命令
  17. 准独角兽已出现,火爆的隐私计算赛道谁是头部玩家?
  18. REST API 最佳实践 – REST 端点设计示例
  19. android 记事簿源码,安卓记事本源代码,详细。
  20. jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed...

热门文章

  1. 疑似苹果iPhone SE2手机最新渲染图曝光:后置单摄
  2. 首发量产1亿像素,小米新机宣布11月5日发布!
  3. 支付分当钱花有人信了?微信辟谣:开通微信支付分不收费
  4. 快手联合创始人银鑫卸任A站法定代表人、董事、经理
  5. 鸿蒙系统是噱头和谈判策略?华为梁华:是针对IoT的操作系统
  6. 产业链加入爆料行列!2019年新iPhone:外形无变化 后置摄像头升级
  7. 力压华为小米!安兔兔1月安卓性能榜第一名是它!
  8. 40岁老码农面试京东被淘汰,HR感叹:40岁混不到高管,都会被清退
  9. java webservice 客户端_Java Webservice客户端(最佳方法)
  10. php性能测试xhprof,PHP性能分析之Xhprof的使用