nginx+tomcat9+redisson+redis+jdk1.8简单实现session共享
一、环境安装
由于资源限制,在虚拟机中模拟测试,一台虚拟机,所有软件均安装到该虚拟机内
安装系统:CentOS Linux release 7.4.1708 (Core)
CentOS安装选择版本:Basic Web Server
redis版本:5.0.2
jdk版本:1.8.0_191
nginx版本:1.14.1
tomcat版本:9.0.13
1、安装gcc
yum -y installed gcc
2、安装redis
2.1、解压
tar -zxvf redis-5.0..tar.gz -C /usr/local/
2.2、进入redis安装目录
cd /usr/local/redis-5.0.
2.3、安装
make && make install
2.4、启动redis
/usr/local/redis-5.0./src/redis-server --protected-mode no &
3、安装jdk
3.1、查询已安装jdk
rpm -qa | grep jdk | grep -v grep
3.2、若为openjdk或者非1.8版本,则卸载
rpm -e --nodeps “具体安装jdk”
3.3、安装
rpm -ivh jdk-8u191-linux-x64.rpm
3.4、设置环境变量
/etc/profile中添加如下配置
export JAVA_HOME=/usr/java/jdk1..0_191-amd64/
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin/
3.5、使配置生效
source /etc/profile
4、安装tocmat
4.1、新建两个tocmat
tar -zxvf apache-tomcat-9.0..tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-9.0. tocmat1 tar -zxvf apache-tomcat-9.0..tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-9.0. tocmat2
4.2、配置tomcat端口
tomcat1 Connector port改为8081
tomcat2 server port改为8006,Connector port改为8082,AJP Connector port改为8010
如果有需要,可在tomcat/bin目录下新建setenv.sh文件,来设置内存大小等参数,也可在catalina.sh中直接设置,本例属于测试,未进行该设置
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
JAVA_OPTS="-server -Xms1000m -Xmx1000m -XX:PermSize=128M -XX:MaxPermSize=128M"
export JAVA_OPTS
export JAVA_HOME=$JAVA_HOME
5、安装nginx
5.1、安装依赖包
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
5.2、解压
tar -zxvf nginx-1.14..tar.gz
5.3、进入安装目录
cd nginx-1.14.
5.4、测试安装环境,默认将安装在/usr/local/nginx下
./configure
若configure未通过,则需要处理出现的异常,否则直接make && make install也是会出错
5.5、编译安装
make && install
5.6、检查是否安装成功
http://192.168.3.12
若启动正常,页面不能访问,则检查是否防火墙未关闭或者80端口未允许访问,关闭防火墙方法
systemctl stop firewalld
二、session共享和负载均衡配置
1、tocmat配置
1.1、在tomcat/conf/context.xml中增加RedissonSessionManager,tomcat1和tomcat2都要配置
<Manager className="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/redisson.conf" readMode="MEMORY" updateMode="DEFAULT"/>
具体参数可参考:
https://github.com/redisson/redisson/blob/dfcf183fb99e2718a748148942926256f650ee24/redisson-tomcat/README.md
配置redisson
1.2、在tomcat安装目录下新建redisson.conf,添加如下配置
{
"singleServerConfig":{
"idleConnectionTimeout":,
"pingTimeout":,
"connectTimeout":,
"timeout":,
"retryAttempts":,
"retryInterval":,
"password":null,
"subscriptionsPerConnection":,
"clientName":null,
"address": "redis://127.0.0.1:6379",
"subscriptionConnectionMinimumIdleSize":,
"subscriptionConnectionPoolSize":,
"connectionMinimumIdleSize":,
"connectionPoolSize":,
"database":,
"dnsMonitoringInterval":
},
"threads":,
"nettyThreads":,
"codec":{
"class":"org.redisson.codec.JsonJacksonCodec"
},
"transportMode":"NIO"
}
本例中使用的为单实例redis,具体参数配置可参考:
https://github.com/redisson/redisson/wiki/2.-Configuration#26-single-instance-mode
redis集群可参考如下链接中其他配置
https://github.com/redisson/redisson/wiki/2.-Configuration
1.3、拷贝jar包
https://github.com/redisson/redisson/tree/dfcf183fb99e2718a748148942926256f650ee24/redisson-tomcat下载redisson-all-3.9.1.jar和redisson-tomcat-9-3.9.1.jar,拷贝到${catalina.base}/lib下
分别启动tomcat1和tomcat2,验证是否可正常访问
http://192.168.3.12:8081/mytest/index.jsp
http://192.168.3.12:8082/mytest/index.jsp
1.4、nginx配置
修改nginx.conf配置
http节点中添加如下配置
upstream backend {
server 127.0.0.1: max_fails= fail_timeout=10s;
server 127.0.0.1: max_fails= fail_timeout=10s;
}
location节点中增加proxy_pass项
location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
}
三、测试
1、tomcat1/webapps/新建目录mytest,mytest目录下新建index.jsp,内容如下
<%@ page language="java" %>
<html>
<head><title>tomcat1</title></head>
<body>
<table align="centre" border="">
<tr>
<td>SessionID</td>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>SessionCreatedTime</td>
<td><%= session.getCreationTime() %></td>
</tr>
<tr>
<td>ServerName</td>
<td><%=request.getServerName()%></td>
</tr>
<tr>
<td>SessionPort</td>
<td><%=request.getServerPort()%></td>
</tr>
<tr>
<td>CustomString</td>
<td>This is the first tomcat</td>
</tr>
</table>
</body>
</html>
2、tomcat2/webapps/新建目录mytest,mytest目录下新建index.jsp,内容如下
<%@ page language="java" %>
<html>
<head><title>tomcat2</title></head>
<body>
<table align="centre" border="">
<tr>
<td>SessionID</td>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>SessionCreatedTime</td>
<td><%= session.getCreationTime() %></td>
</tr>
<tr>
<td>ServerName</td>
<td><%=request.getServerName()%></td>
</tr>
<tr>
<td>SessionPort</td>
<td><%=request.getServerPort()%></td>
</tr>
<tr>
<td>CustomString</td>
<td>This is the second tomcat</td>
</tr>
</table>
</body>
</html>
3、重新启动redis,tomcat,nginx
4、输入地址访问
http://192.168.3.12/mytest/
5、结果

点击刷新按钮

可以发现,两次访问,SessionID都是相同的,并且title和自定义的字符串不一样,说明分别访问了tomcat1和tomcat2
登陆redis
redis-cli
输入以下命令可发现,session已经存放到了redis中,并且默认的超时时间为30 min

nginx+tomcat9+redisson+redis+jdk1.8简单实现session共享的更多相关文章
- keepalived+nginx+tomcat+redis实现负载均衡和session共享(原创)
keepalived+nginx+tomcat+redis实现负载均衡和session共享 直接上链接,码了一天,就不再重写了,希望能帮到大家,有问题欢迎留言交流.
- Nginx+Tomcat+Memcached 实现集群部署时Session共享
Nginx+Tomcat+Memcached 实现集群部署时Session共享 一.简介 我们系统经常要保存用户登录信息,有Cookie和Session机制,Cookie客户端保存用户信息,Sessi ...
- tomcat+nginx+redis实现均衡负载、session共享(一)
在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...
- tomcat+nginx+redis实现均衡负载、session共享(二)
今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,http://www.cnblogs.com/zhrxidian/p/5432886.html. 1.red ...
- 【转载】tomcat+nginx+redis实现均衡负载、session共享(一)
http://www.cnblogs.com/zhrxidian/p/5432886.html 在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一 ...
- (转)tomcat+nginx+redis实现均衡负载、session共享(一)
在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...
- tomcat+nginx+redis实现均衡负载以及session共享
1.redis简介及下载安装 作为这次的主角,相信大家对redis应该都一定印象,redis是一款开源的高性能key-value数据库,拥有丰富的键值储存类型,并提供多种语言的API. 与一般数据库不 ...
- 基于nginx tomcat redis分布式web应用的session共享配置
一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...
- nginx redis tomcat 分布式web应用 session共享
目标:多台tomcat 使用redis实现共享session.redis的安装请参阅:centos上安装redis nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.w ...
随机推荐
- [待优化笔记]原生JS实现验证框架 checkFun
;(function(){ /** 验证框架 checkFun * 使用方法: * <input class="required" type="text" ...
- cf24D. Broken robot(高斯消元)
题意 题目链接 Sol 今天上午的A题.想出来怎么做了但是没时间写了qwq 思路很简单,首先把转移方程列一下,发现每一个位置只会从下一行/左右转移过来,而且第N行都是0,那么往下转移的都可以回带. 剩 ...
- 2017-11-28 中文编程语言之Z语言初尝试: ZLOGO 4
"中文编程"知乎专栏原文. 作者为本人. @TKT2016 开发的Z语言(ZLOGO是它的一个部分)是本人至今看到的唯一一个仍活跃开发的开源且比较完整的中文编程语言项目. 它的源码 ...
- 剑指Offer 答题截图
- c/c++ static关键字
static关键字 1,static 成员变量 static 成员变量不随着对象的创建而开辟内存空间.也就是说,不管从哪个对象去看static成员变量,都是一样的. 2, static 成员方法 st ...
- c/c++ 图的创建(二维数组法)
c/c++ 图的创建(二维数组法) 图的概念 图由点和线组成 知道了图中有多少个点,和哪些点之间有线,就可以把一张图描绘出来 点之间的线,分有方向和无方向 创建图 创建图,实际就是创建出节点,和节点之 ...
- python多线程与多进程--存活主机ping扫描以及爬取股票价格
python多线程与多进程 多线程: 案例:扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活) 普通版本: #扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)im ...
- Vue学习之路7-v-on指令学习之简单事件绑定
前言 在JavaScript中任何一个DOM元素都有其自身存在的事件对象,事件对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置和鼠标按钮的状态等.事件通常与函数结合使用,函数不 ...
- JQuery Plugin 开发
学习 JQuery 插件开发之后, 可以将自己平时常用的功能封装成插件, 便于在不同的项目之间使用. JQuery 官网上的 插件开发教程就很不错, 简单易懂. 参考网址: http://learn. ...
- 我的BRF+自学教程(二):跟踪模式(trace mode)
使用自开发程序来处理业务逻辑时,处理过程通常是个黑箱,业务顾问和业务用户不知道程序的具体运行方式,要依赖文档和频繁的沟通来确认实际情况. BRFplus可以通过配置的方式实现业务逻辑,使得业务人员把业 ...