tomcat集群会话信息存放到redis集群
Tomcat 与 Redis 结合做 Session 管理的本质,是让 Tomcat 把原本本地内存中的 StandardManager 替换为一个分布式的 RedisSessionManager,所有节点共享同一个 Redis,实现真正的横向扩展。
Tomcat 装 Session Manager 模块 → 修改 server.xml → 配置 Redis → 重启验证 → 多节点压测。
步骤一:准备 Redis 环境
单节点环境可先跑 Redis(不过生产必须 Redis Cluster / Sentinel)。
业务上需要注意:Redis 配持久化
RDB+AOF或至少 AOF appendfsync everysec,避免宕机丢会话。
步骤二:下载 Redis Session Manager 组件**
1.通用选型:
tomcat-redis-session-manager(vanilla)
或 redisson-tomcat
建议 redisson-tomcat,维护积极、性能好。
- 下载对应版本(以 Tomcat 9 为例):
放置文件:
redisson-all-x.x.x.jar
redisson-tomcat-9-x.x.x.jar
复制到:
$CATALINA_HOME/lib/
步骤三:创建 Redisson 配置文件
- 文件路径:
$CATALINA_HOME/conf/redisson.conf
- 单机示例:
1 | { |
- 集群示例:
1 | { |
步骤四:修改 Tomcat 的 server.xml**
- 打开配置:
$CATALINA_HOME/conf/server.xml
- 在
<Context>中加入 Redisson Session Manager(注意不要放错位置,只能放在 Host 下的 Context):
1 | <Context> |
参数说明:
readMode:
READ → 所有 Session 从 Redis 获取(一致性好,但性能一般)
MEMORY → 本地缓存 + Redis(性能高,但一致性弱)updateMode:
DEFAULT → session.setAttribute 时才更新
AFTER_REQUEST → 每次请求结束同步,最安全keyPrefix:区分不同 Tomcat 集群的 Namespace
步骤五:重启 Tomcat 验证**
- 观察日志是否载入:
INFO o.r.tomcat.RedissonSessionManager - RedissonSessionManager started
- 通过
redis-cli确认会话是否写进 Redis:
keys tomcat_session:*
- 访问应用 → 换节点访问 → 验证 Session 一致性。
步骤六:典型双节点架构图**
flowchart LR A[用户请求] --> LB[负载均衡器] LB --> T1[Tomcat-1] LB --> T2[Tomcat-2] T1 --> R[(Redis Cluster)] T2 --> R
优化点
不要使用黏性会话(sticky session),否则 Redis 功能无意义。
在高并发场景,
readMode=MEMORY updateMode=AFTER_REQUEST是最佳平衡。Redis 需要设置
timeout=3000ms以上,避免偶发网络抖动让 Session 丢失。若 Session 大小 > 10KB,要考虑拆分或外置,因为 Redis 会话存储成本会变高。
Kubernetes 场景中,要确保 Tomcat Pod 滚动升级时
terminationGracePeriodSeconds足够大,避免未刷新的 Session 丢失。