首页 > 数据库 >使用Tomcat基于redis的session共享机制集群部署

使用Tomcat基于redis的session共享机制集群部署

时间:2022-12-20 09:33:46浏览次数:38  
标签:Tomcat tomcat redis nginx session usr local

常见的session集群方案:session复制和session共享

Session复制:指session信息会在集群节点之间复制,每个节点服务上都会有相同的session信息;主要是实现后端多个节点的冗余功能。但是node之间通信频繁,响应速度有影响,多并发,高频发操作的情况下,性能存在严重问题;

Session共享:通俗来说就是一个浏览器对应多个web服务时,服务端的session数据需要共享

【集群环境】

因为是在个人虚机模拟,资源有限,故tomcat和redis环境复用(Ps:软件环境需要的话,可以找到博客左边的联系方式)

软件环境:jdk1.8.0、redis-5.0.3.tar.gz、apache-tomcat-8.0.50.tar.gz、redisson-tomcat-8-3.12.1.jar、redisson-all-3.12.1.jar

Nginx代理端:192.168.109.100 

Tomcat_node1/redis服务: 192.168.109.101  

Tomcat_node2 :192.168.109.102 

【集群部署】

 部署redis环境

#tar xvf redis-5.0.3.tar.gz

#cd redis-5.0.3

#make

#cp redis.conf /etc/

#cd src

#cp redis-cli redis-server redis-sentinel /usr/sbin/

打开redis配置文件/etc/redis.conf,修改两个配置项的值为如下内容:

#vim /etc/redis.conf

bind 0.0.0.0
daemonize yes

最后,启动redis服务即可

#/usr/sbin/redis-server /etc/redis.conf

【部署tomcat环境】

首先部署jdk环境

#mkdir /usr/java

#tar zxvf jdk1.8.0_131.tar.gz -C /usr/java/

#vim /erc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

#source  /etc/profile

#tar zxvf apache-tomcat-8.0.50.tar.gz -C /usr/local/
#mv /usr/local/apache-tomcat-8.0.50/ /usr/local/tomcat8

目前为止tomcat部署完毕,接下来整合tomcat与redis实现session共享

此时需要部署jar包环境,可以从https://github.com/redisson/redisson/tree/master/redisson-tomcat此链接下载对应的版本。

下载完毕之后将两个jar包解压到/usr/local/tomcat8/lib/目录下面

#mv redis-sson-al-3.12.1.jar  redisson-tomcat-8-3.12.1.jar  /usr/local/tomcat8/lib

#jar redis-sson-al-3.12.1.jar

#jar redisson-tomcat-8-3.12.1.jar

增加RedissonSessionManager配置

# vim /usr/local/tomcat8/conf/context.xml

<Manager className="org.redisson.tomcat.RedissonSessionManager"
    configPath="${catalina.base}/conf/redisson.json" readMode="REDIS" updateMode="DEFAULT"/>

 

 #vim  /usr/local/tomcat8/conf/redisson.json

复制代码
{
   "singleServerConfig":{
      "idleConnectionTimeout":10000,
      "connectTimeout":10000,
      "timeout":3000,
      "retryAttempts":3,
      "retryInterval":1500,
      "password":null,
      "subscriptionsPerConnection":5,
      "clientName":null,
      "address": "redis://127.0.0.1:6379",     #这里的IP地址如果是将redis和tomcat放在一起就写127.0.0.1,如果是分离部署的话,就写redis所在的主机IP
      "subscriptionConnectionMinimumIdleSize":1,
      "subscriptionConnectionPoolSize":50,
      "connectionMinimumIdleSize":32,
      "connectionPoolSize":64,
      "database":0,
      "dnsMonitoringInterval":5000
   },
   "threads":0,
   "nettyThreads":0,
   "codec":{
      "class":"org.redisson.codec.FstCodec"
   },
   "transportMode":"NIO"
} 
复制代码

最后一步就是写一个用于访问tomcat的测试页面

#vim /usr/local/tomcat8/webapps/ROOT/testsession.jsp

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                        + request.getServerName() + ":" + request.getServerPort()
                        + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>Welcome to visit tomcat1</title>
        </head>

        <body>
        <center><h1>Welcome to visit tomcat1</h1></center>
        <center>
                <h3>sessionId:</h3><%=session.getId()%>
                <h3>session创建时间:</h3><%=session.getCreationTime()%>
        <center>
        </body>
</html>
复制代码

 重启tomcat服务让配置生效即可

# /usr/local/tomcat8/bin/startup.sh

【测试】

在这里我们可以看到tomcat测试页面可以正常访问,登录redis客户端,我们发现,redis已经生成了session信息;

http://192.168.109.101:8080/testsession.jsp

 配置第二个tomcat实例的话,按照上述操作步骤即可,需要注意的是tomcat测试页面要保证与109.101不冲突即可

另外这里的redisson.json配置指定109.101上即可,因为之前将redis部署在了109.101上,此时的109.102不需要在安装redis,直接指定redis的IP即可

复制代码
[root@hostname-109102 lib]# cat  /usr/local/tomcat8/conf/redisson.json
{
   "singleServerConfig":{
      "idleConnectionTimeout":10000,
      "connectTimeout":10000,
      "timeout":3000,
      "retryAttempts":3,
      "retryInterval":1500,
      "password":null,
      "subscriptionsPerConnection":5,
      "clientName":null,
      "address": "redis://192.168.109.101:6379",
      "subscriptionConnectionMinimumIdleSize":1,
      "subscriptionConnectionPoolSize":50,
      "connectionMinimumIdleSize":32,
      "connectionPoolSize":64,
      "database":0,
      "dnsMonitoringInterval":5000
   },
   "threads":0,
   "nettyThreads":0,
   "codec":{
      "class":"org.redisson.codec.FstCodec"
   },
   "transportMode":"NIO"
}
复制代码

 【Nginx】

 #tar zxvf nginx-1.14.2.tar.gz -C /usr/src/

# cd /usr/src/nginx-1.14.2/

#./configure \

--user=www \
--group=www \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/subsys/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre
# make
# make install

# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/

# vim /usr/local/nginx/conf/nginx.conf

复制代码
user  www;
worker_processes  8;
events {
    worker_connections  65536;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
   upstream tomcat {
     server 192.168.109.101:8080 weight=1;
     server 192.168.109.102:8080 weight=1;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://tomcat;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }

    }
}
复制代码

 

 nginx  -s reload   #重启nginx

Nginx配置完毕之后,通过访问192.168.109.100nginx代理端即可均衡后端两台tomcat,不停的刷新会轮训切换两个tomcat页面,但是session值并没有发生改变,而且都相同。这说明两个tomcat实例都共享了redis里面存储的session信息

也就实现了Nginx+Tomcat+redis的session共享功能;

 

END!

标签:Tomcat,tomcat,redis,nginx,session,usr,local
From: https://www.cnblogs.com/Lqdream/p/16993556.html

相关文章

  • 聊聊如何利用redis实现多级缓存同步
    前言前阵子参加业务部门的技术方案评审,故事的背景是这样:业务部门上线一个专为公司高管使用的系统。这个系统技术架构形如下图按理来说这个系统因为受众很小,可以说基本上......
  • docker-部署tomcat
    dockerpulltomcat:8#拉取镜像dockerrun-d-p8080:8080tomcat:8#创建容器dockerps-a#可以查看容器iddockerexec-ittomcat的容器id/bin/bash#进入容器do......
  • .NET Redis客户端SimpleRedis的使用
    一、项目说明SimpleRedis基于新生命团队NewLife.Redis的封装,支持.NETCore3/.NET6/7。NewLife.Redis是一个Redis客户端组件,以高性能处理大数据实时计算为目标。源码: h......
  • mysql及redis环境部署时遇到的问题解决
    redis开启远程访问redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf打开redis.conf文件在NETWORK部分有说明解决办法:注释掉bind127.0.0.1可以使所有的ip访......
  • redission 依赖冲突
    问题背景项目打包后运行,报错如下:因在idea运行项目能正常启动,打包后java-jar运行报错。且看了历史提交记录,最近无人修改。因此怀疑是打包环境出了问题,clean、重装都没......
  • 一次 Redis 事务使用不当引发的生产事故
    这是悟空的第170篇原创文章官网:​​http://www.passjava.cn​​你好,我是悟空。本文主要内容如下:一、前言最近项目的生产环境遇到一个奇怪的问题:现象:每天早上客服人员在后......
  • 【redis-01】linux与windows的远程互连
    写在开头博主在用linux远程连接windows上的redis时遇到了一些问题,网络上能搜索到的回答跟自己的情况不太相符,索性就总结一下相关问题写篇随笔分享给同路人,也方便以后自己......
  • docker-compose入门以及部署SpringBoot+Vue+Redis+Mysql(前后端分离项目)以若依前后端
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662上面在搭建起来前后端分离版的项目后。......
  • redis
    Redis高可用方案......
  • Redis
    Redis1.Redis概述Redis是一种基于键值对(key-value)的NoSQL数据库,是由C语言编写。1.1Redis特性速度快所有数据都是存放在内存中的。Redis是用C语言实现的,执行速度......