TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 网站部署
  3. 正文

如何实现tomcat通过redis共享session

2024年2月14日 877点热度 0人点赞 0条评论

tomcat通过redis实现session共享

架构

主机 IP
tomcat01 192.168.139.35
tomcat02 192.168.139.99
redis 192.168.139.71
nginx 192.168.139.100

tomcat新增一个虚拟主机

  • 两台tomcat服务器上操作

 vim /apps/tomcat/conf/server.xml
 # 新增下面这些内容
 .......
       <Host name="session.stj.com"  appBase="/session"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
........
​
mkdir /session/ROOT -p

配置访问页面

  • 两台tomcat服务器上操作

vim /session/ROOT/index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
  <title>tomcat test</title>
  </head>
   <body>
     <div>On <%=request.getServerName() %></div>
     <div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
     <div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
     <%=new Date()%>
   </body>
</html>

配置nginx反向代理

[root@nginx ~]# vim /etc/nginx/conf.d/www.conf
upstream tomcat {
    server 192.168.139.35:8080;
    server 192.168.139.99:8080;
}
server {
    listen  80;
    server_name session.stj.com;
    location ~* \.(jsp|do)$ {
       proxy_pass http://tomcat;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
    }
}
[root@nginx ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx ~]# nginx -s reload

访问浏览器

每次访问的sessionID不一样

配置redis

[root@redis ~]# vim /etc/redis.conf 
.....
bind 192.168.139.71 127.0.0.1
.....
requirepass 123456
.....
[root@redis ~]# systemctl restart redis
[root@redis ~]# ss -tnl
State      Recv-Q Send-Q                    Local Address:Port                                   Peer Address:Port 
LISTEN     0      128                           127.0.0.1:6379                                              *:*    
LISTEN     0      128                      192.168.139.71:6379                                              *:*    
[root@redis ~]# redis-cli 
127.0.0.1:6379> AUTH 123456
OK

下载TomcatClusterRedisSessionManager

  • 两台tomcat服务器上操作

https://github.com/ran-jit/tomcat-cluster-redis-session-manager

[root@tomcat02 src]# ll
total 900
-rw-r--r-- 1 root root 921429 Feb 14 18:27 tomcat-cluster-redis-session-manager.zip
[root@tomcat02 src]# unzip tomcat-cluster-redis-session-manager.zip
[root@tomcat02 src]# cd tomcat-cluster-redis-session-manager/lib/
[root@tomcat02 lib]# ll
total 1000
-rw-r--r-- 1 root root 129174 May 20  2019 commons-pool2-2.6.2.jar
-rw-r--r-- 1 root root 587115 May 20  2019 jedis-3.0.1.jar
-rw-r--r-- 1 root root  41139 May 20  2019 slf4j-api-1.7.26.jar
-rw-r--r-- 1 root root 255297 May 13  2020 tomcat-cluster-redis-session-manager-4.0.jar
[root@tomcat02 lib]# cp *.jar /apps/tomcat/lib/
[root@tomcat02 lib]# cp ../conf/redis-data-cache.properties /apps/tomcat/conf/

配置redis-data-cache.properties

  • 两台tomcat服务器上操作

[root@tomcat02 ~]# grep '^[^#]' /apps/tomcat/conf/redis-data-cache.properties
redis.hosts=192.168.139.71:6379
redis.password=123456
redis.cluster.enabled=false
redis.sentinel.enabled=false
redis.sentinel.master=mymaster
redis.database=1
redis.timeout=2000
lb.sticky-session.enabled=false
session.persistent.policies=DEFAULT
redis.sso.timeout=0

配置context.xml

  • 两台tomcat服务器上操作

[root@tomcat02 ~]# vim /apps/tomcat/conf/context.xml 
# 添加前面下面内容
.......
  <Valve className="tomcat.request.session.redis.SessionHandlerValve" /> 
  <Manager className="tomcat.request.session.redis.SessionManager" />
</Context>

配置tomcatlconf/web.xml中的会话过期时间(分钟)

  • 两台tomcat服务器上操作

[root@tomcat02 ~]# vim /apps/tomcat/conf/web.xml 
....
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
....

重启tomcat验证session共享

  • 两台tomcat服务器上操作

systemctl restart tomcat.service 

可以看到调度的后端服务器在改变,而SessionID保持不变

标签: 暂无
最后更新:2024年2月14日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • tomcat通过redis实现session共享
    • 架构
    • tomcat新增一个虚拟主机
    • 配置访问页面
    • 配置nginx反向代理
    • 访问浏览器
    • 配置redis
    • 下载TomcatClusterRedisSessionManager
    • 配置redis-data-cache.properties
    • 配置context.xml
    • 配置tomcatlconf/web.xml中的会话过期时间(分钟)
    • 重启tomcat验证session共享

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号