作者:蕃薯耀

链接:www.cnblogs.com/fanshuyao

一、Session共享使用tomcat-cluster-redis-session-manager插件实现

插件地址见:
https://github.com/ran-jit/tomcat-cluster-redis-session-manager

该插件支持Tomcat7、Tomcat8、Tomcat9

或者直接在附件中下载(版本为2.0.2,2017-11-27日前最新版本)

http://dl.iteye.com/topics/download/d9fffd9d-84dd-385b-b10e-6376eaf0c815

这里有是一个只支持Tomcat7的,不支持tomcat8,暂时不见新的维护:

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

二、tomcat-cluster-redis-session-manager详解

1、解压后的文件如下:

conf目录下有一个redis-data-cache.properties :

Redis的配置文件

#

ib目录下有4个jar包,如下:

  1. commons-logging-1.2.jar

  2. commons-pool2-2.4.2.jar

  3. jedis-2.9.0.jar

  4. tomcat-cluster-redis-session-manager-2.0.1.jar

三、使用方法:

压缩文件中有使用方法,见readMe.txt 文件:

第一步:

1. Move the downloaded jars 

就是把lib目录下的Jar包全复制到tomcat/lib目录下

(一般来说tomcat是集群,至少有2个tomcat,所以先配置好一个tomcat,复制完文件后,再将tomcat文件重新复制一份,这样省事,但需要修改tomcat相应的端口)

第二步:

2. Add tomcat system property 

就是配置一个环境变量,和Jdk配置的环境变量一样,需要配置一个catalina.base的环境变量,值为TOMCAT_LOCATION

如下:

第三步:

file 

把conf目录下的配置文件redis-data-cache.properties复制到tomcat/conf/目录下

第四步:

4. Add the below two lines 

在tomcat/conf/目录下的context.xml文件,加上相应的配置,如下:

<?xml  version="1.0" encoding="UTF-8"?>  

第五步:

5. Verify the session expiration time (minutes) in tomcat/conf/web.xml          <session-config>              <session-timeout>60<session-timeout>          <session-config>  

修改session的过期时间,默认是30分钟,可以不需要此步骤。

session集群的配置至此结束。扩展:带你从头进行RabbitMQ安装、集群搭建、镜像队列配置和代码验证

四、Nginx集群

1、下载Nignx:

http://nginx.org/en/download.html

本人练习时使用windows,所以下载的windows版本:

http://nginx.org/download/nginx-1.13.7.zip

2、下载后解压:D:\soft\nginx-1.12.2

(之前使用的是1.12.2的版本,现在最新版是1.13.7,但都一样,附件中有1.12.2版本提供下载)

3、修改Nginx配置文件nginx.conf

进入conf目录(D:\soft\nginx-1.12.2\conf),找到nginx.conf配置文件,打开编辑:

3.1在http{……}里加上upstream,如下:

upstream myTomcatCluster{

server:配置tomcat服务器请求的地址,2台Tomcat服务就配置2个server,分别对应9300,9400端口

weight 表示权重,权重越大,访问到的机率越大。

3.2、修改location / {……}

默认是这个的:

location / {  

修改成这样:

location / {  

最简单的配置就是:

location / {  

myTomcatCluster 对应upstream后的命名。

下面的配置可以解决2个Tomcat服务器集群,当一台服务器挂掉(宕机)后,请求变得很慢的问题。

(Tomcat集群一台服务器挂掉后请求变慢解决方案)

proxy_connect_timeout       

3.3、启动Nginx服务器

使用Windows命令行启动

(1)进入D盘:d:

(2)进入D:\soft\nginx-1.12.2目录:

cd 

(3)启动服务:(启动一闪而过,但打开进程管理器能看到是已经启动的)

start nginx  

关闭服务的命令:nginx -s stop

重新加载的命令:nginx -s reload,修改配置文件后,可以使用该命令直接加载,不需要重启。

五、测试集群:

1、tomcat准备

将已经配置好的一个tomcat复制一份,修改端口,然后再修改一下tomcat的配置文件(server.xml)

我的一个tomcat在:

D:\soft\apache-tomcat-8.0.45-9300\conf

另一个是:

D:\soft\apache-tomcat-8.0.45-9400\conf

修改:

<Engine defaultHost="localhost" name="Catalina">  

其中tomcat 9300端口的修改如下:

<Engine defaultHost="localhost" jvmRoute="jvm9300" name="Catalina">  

tomcat 9400端口的修改如下:

<Engine defaultHost="localhost" jvmRoute="jvm9400" name="Catalina">  

2、项目准备:

新建立一个web项目,然后新建立一个index.jsp的文件,如下:

"java" contentType=

主要是在打印页面输出sessionId的信息:

out.println(

然后把这个项目分别部署到9300、9400端口的2个tomcat中,分别启动,记得也启动Nginx和redis哦

然后打开浏览器通过地址访问项目:http://localhost/redis-session/ (使用Nginx集群分发,不需要端口号访问),显示如下:

tomcat 集群测试  

无论怎么刷新访问(打开新的标签页也是(非新窗口))的都是jvm9400,也就是端口号为9400的tomcat

后缀.jvm9400就是前面配置的:

<Engine defaultHost="localhost" jvmRoute="jvm9400" name="Catalina">  

打开新的隐身窗口访问:

tomcat 集群测试  

这时访问的是端口号为9300的tomcat,通过后缀.jvm9300判断知道。

新窗口每次访问的是都是tomcat9300,session也不会变。

在访问后缀为.jvm9400时,把端口9400的tomcat关掉,再次刷新访问,sessionId一样不变,由此可见,2个tomcat的sessionId是共享的。

使用Redis实现session共享的好处就是,把session管理放在redis中,如果服务器重启或挂机,sessionId保存在redis中,下次重启后一样生效,避免sessionId失效,同样redis最好也做集群,避免redis重启或挂机。

结束了。

Java面试题专栏

【61期】MySQL行锁和表锁的含义及区别(MySQL面试第四弹)【62期】解释一下MySQL中内连接,外连接等的区别(MySQL面试第五弹)【63期】谈谈MySQL 索引,B+树原理,以及建索引的几大原则(MySQL面试第六弹)【64期】MySQL 服务占用cpu 100%,如何排查问题? (MySQL面试第七弹)【65期】Spring的IOC是啥?有什么好处?【66期】Java容器面试题:谈谈你对 HashMap 的理解【67期】谈谈ConcurrentHashMap是如何保证线程安全的?【68期】面试官:对并发熟悉吗?说说Synchronized及实现原理【69期】面试官:对并发熟悉吗?谈谈线程间的协作(wait/notify/sleep/yield/join)【70期】面试官:对并发熟悉吗?谈谈对volatile的使用及其原理

欢迎长按下图关注公众号后端技术精选

C#session共享+redis_Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享相关推荐

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

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

  2. 闲着无聊,今天就写个 dockerfile 定制 tomcat+nginx 集群

    dockerfile 定制 tomcat+nginx 集群 前言(来张图) 一.dockerfile撰写 tomcat 镜像 二.dockerfile撰写 nginx 镜像 三.查看镜像构建情况 四. ...

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

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

  4. Tomcat学习总结(8)——Tomcat+Nginx集群解决均衡负载及生产环境热部署

    近日,为解决生产环境热部署问题,决定在服务器中增加一个tomcat组成集群,利用集群解决热部署问题.

  5. Nginx+memcached+tomcat配置集群session共享负载均衡

    Nginx+memcached+tomcat配置集群session共享负载均衡 配置环境: windows xp下 jdk1.7.0_10      nginx-1.2.6  (附下载)      m ...

  6. nginx+tomcat实现集群负载均衡(实现session复制)

    架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomcat) 优点:实现了可弹性化的架构,在压力 ...

  7. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

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

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

  9. Nginx+Tomcat+Memcached集群 【测试成功】

    Nginx+Tomcat+Memcached集群 Tomcat集群session同步方案有以下几种方式: 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配 ...

最新文章

  1. Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析
  2. Mysql8.0.20下载和安装
  3. Mac地址怎么做到全球唯一的?
  4. 简单的串口助手程序开发
  5. 好程序员分享大势所趋 HTML5成Web开发者最关心的技术
  6. 快速学会开发微信小程序
  7. Zabbix安装界面显示PHP time zone 为“红色”的解决办法
  8. Atitit.跨语言系统服务管理器api兼容设计
  9. 全球和国产十大AI芯片
  10. 移动硬盘损坏:文件或目录已损坏(修复实录)
  11. BSOD 0x00000133
  12. Padavan(华硕固件) 伪固定闪讯密码.
  13. Unix环境高级编程(第三版)apue.h头文件安装教程(第三版)
  14. JavaScript函数——输入某年某月某日,判断这一天是一年中的第几天
  15. 25.redux中间件redux-thunk和redux-saga
  16. 编写python爬虫基础_0基础如何快速写python爬虫
  17. datetime的时值
  18. 不允许一个用户使用一个以上用户名域一个服务器或共享
  19. 单纤双向(Bidi)是如何实现的?会在5G前传中占一席之地吗?
  20. 博鳌亚洲论坛今天闭幕,都有哪些值得互联网行业关注的精华?

热门文章

  1. App后台开发运维和架构实践学习总结(10)——基于Java-JWT前后端token认证实战使用详解
  2. MyBatis学习总结(12)——Mybatis+Mysql分页查询
  3. html5 nodejs桌面开发工具,html5fromImages-nodejs生成器入门
  4. JAVA程序设计第十版第七章_java程序设计第七章答案
  5. java锁机制ppt_总结:Java锁机制
  6. Python之路(运算符)
  7. maven项目jsp无法识别jstl的解决办法
  8. 实战 | Python批量提取Win10锁屏壁纸
  9. 简易VR眼镜:是玩具还是工具?
  10. 插入排序——3希尔排序实现