nginx+tomcat+redis(session)
session实现的方式有3种
1.利用nginx或者haproxy等负载均衡器实现源地址hash等
2.tomcat自身的session集群
3.独立的session服务器来存放
本次着重讲述redis的哨兵或集群的配置
nginx | 192.168.10.30 |
tomcat1 | 192.168.10.31 |
tomcat2 | 192.168.10.32 |
redis1 | 192.168.10.33 |
redis2 | 192.168.10.34 |
redis3 |
192.168.10.35 |
所有节点时间同步,关闭防火墙等
upstream tomcat-server {
server 192.168.10.31:8080;
server 192.168.10.32:8080;
}
server {
listen 80;
location ~* \.(jsp|do)$ {
proxy_pass http://tomcat-server;
}
}
[root@nginx ~]# nginx -s reload
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> tomcat website </h1>
<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>
[root@tomcat1 ~]#systemctl restart tomcat
[root@redis1 ~]#yum -y install redis
[root@redis1 ~]#systemctl enable --now redis redis-sentinel.service
[root@redis1 ~]#sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e " /# requirepass/a requirepass 123456" -e "/# masterauth/a masterauth 123456" /etc/redis.conf
[root@redis1 ~]#echo "replicaof 192.168.10.35 6379" >> /erc/redis.conf 在1/2节点配置,3不需要
[root@redis1 ~]#echo "sentinel monitor mymaster 192.168.10.35 6379 2" >> /etc/redis.sentinel.conf
[root@redis1 ~]#echo "sentinel auth-pass mymaster 123456" >> /etc/redis.sentinel.conf
[root@redis1 ~]#systemctl restart redis redis-sentinel.service
一定要确保哨兵没问题;如下
[root@redis1 etc]# redis-cli -p 26379 info |tail -n1
master0:name=mymaster,status=ok,address=192.168.10.35:6379,slaves=2,sentinels=3 这样主节点没问题,哨兵数量为3
[root@tomcat1 ~]#wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/4.0/tomcat-cluster-redis-session-manager.zip
[root@tomcat1 ~]#unzip tomcat-cluster-redis-session-manager.zip
[root@tomcat1 ~]#mv tomcat-cluster-redis-session-manager/lib/* /usr/local/tomcat/lib(路径会有不同)
[root@tomcat1 ~]#env "catalina.base=/usrl/local/tomcat" bash 添加系统变量
[root@tomcat1 ~]#chown tomcat.tomcat /root/tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties
[root@tomcat1 ~]#mv /root/tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties usr/local/tomcat/conf/
[root@tomcat1 conf]# grep -Ev '^$|#' redis-data-cache.properties
redis.hosts=192.168.10.33:26379,192.168.10.34:26379,192.168.10.35:26379 哨兵,也可以写集群(端口就为6379了)
redis.password=123456 这个密码是指redis的密码
redis.cluster.enabled=false 如果部署的是集群那么开启这里
redis.sentinel.enabled=true 哨兵
redis.sentinel.master=mymaster 默认的,如果redis的配置修改了就需要改
lb.sticky-session.enabled=false
session.persistent.policies=DEFAULT
redis.sso.timeout=0
[root@tomcat1 ~]##vim /usr/local/tomcat/conf/context.xml
<Context>
....................
<Valve className="tomcat.request.session.redis.SessionHandlerValve" /> 这两行是追加进去的
<Manager className="tomcat.request.session.redis.SessionManager" />
......................
</Context>
[root@tomcat1 ~]#systemctl restart tomcat

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义