由于项目需要需要做一个tomcat8+redis 的session共享的这么一个构架,尽量的去减少代码修改
网上找了一大堆的文章和资源基本都是扯淡的,大部分根本用不了,看着按照步骤做就行,其实会遇到各种各样的问题,最常见的一个就是tomcat7的集群搭建 兼容到tomcat8上因为2019年之前官方还没有出tomcat8的兼容班,都是以前的文章各种问题
不吐槽了,直接来干货吧
首先,申明一下tomcat8的兼容jar包官网已经有了,只不过都是英文,所以搜索很多都寥寥无几!拿下来官网的api进行翻译修改的。很吃力哦。。
-
1 下载官网的依赖包
-
2 解压
unzip tomcat-cluster-redis-session-manager.zip
chown -R tomcat:tomcat tomcat-cluster-redis-session-manager/
-
3 复制到tomcat/lib下面
cd tomcat-cluster-redis-session-manager/
cp conf/* /tomcat /conf/
cp lib/* l/tomcat/lib/
-
4 在tomcat/conf/redis-data-cache.properties文件中配置redis数据库信息
我这里集群模式,根据提示进行修改
#--redis IP和端口
#- redis hosts ex: 127.0.0.1:6379, 127.0.0.2:6379, 127.0.0.2:6380, ....
redis.hosts=43.242.34.164:7001,43.242.34.164:7002,43.242.34.164:7003,43.242.34.164:7004,43.242.34.164:7005,43.242.34.164:7006
#- 密码
redis.password=lam123
#- 是否启用redis群集模式
redis.cluster.enabled=true
#- 是否启用哨兵模式
redis.sentinel.enabled= true
# 红哨主名 一般默认: mymaster)
redis.sentinel.master=mymaster
#-数据库选择。(数值) 默认0
#redis.database=0
#- 连接超时时间
#redis.timeout=2000
#-启用redis和标准会话模式
#如果启用,
#必须在负载均衡器配置中启用粘性会话。否则,此管理器可能不会返回更新的会话值。
#会话值存储在本地jvm和redis中。
#如果redis已关闭/没有响应,请求将使用JVM存储的会话值来处理用户请求。Redis回来了,值将被同步。
lb.sticky-session.enabled=false
-
5 在tomcat/conf/context.xml文件中…段中增加以下两行:
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
-
6 在每个tomcat根目录下创建jsp方便查看效果
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Server Info</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<%
<%
HttpSession s = request.getSession();
s.setAttribute("name","liuyuhui");
%>
<%
String SERVER_NAME = request.getServerName();
String SERVER_ADDR = request.getLocalAddr();
String SERVER_SOFTWARE = getServletContext().getServerInfo();
String REMOTE_HOST = request.getRemoteHost();
String REMOTE_ADDR = request.getRemoteAddr();
String HTTP_USER_AGENT = request.getHeader("User-Agent");
HashMap infoMap = new HashMap();
infoMap.put("SERVER_NAME", SERVER_NAME);
infoMap.put("SERVER_ADDR", SERVER_ADDR);
infoMap.put("SERVER_SOFTWARE", SERVER_SOFTWARE);
infoMap.put("REMOTE_HOST", REMOTE_HOST);
infoMap.put("REMOTE_ADDR", REMOTE_ADDR);
infoMap.put("HTTP_USER_AGENT", HTTP_USER_AGENT);
Iterator it = infoMap.keySet().iterator();
%>
<table border="1">
<%
while (it.hasNext()) {
Object o = it.next();
%>
<tr><td><%=o%></td><td><%=infoMap.get(o)%></td></tr>
<%
}
%>
<tr><td>SessionAttribute</td><td><%= s.getAttribute("name") %></td></tr>
<tr><td>SessionID</td><td><%= s.getId() %></td></tr>
</table>
</body>
</html>
-
7 重启所有tomcat
一键启停脚本
shutdown-all.sh
ps -ef | grep tomcat_ | awk '{print $2}' | xargs kill -9&
ps -ef | grep tomcat_
start-all.sh
sh /tomcat/tomcat_1_8070_8010_8441_6005/bin/startup.sh
sh /tomcat/tomcat_2_8060_8011_8440_7005/bin/startup.sh
ps -ef | grep tomcat_
-
8 nginx 配置(参考)
upstream blog.linuxs.top {
server 10.3.8.231:8080 max_fails=1 fail_timeout=10s;
server 10.3.8.232:8080 max_fails=1 fail_timeout=10s;
}
server {
listen 80
server_name blog.linuxs.top
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443
server_name blog.linuxs.top
ssl on;
ssl_certificate /etc/pki/nginx/blog.linuxs.top.crt;
ssl_certificate_key /etc/pki/nginx/blog.linuxs.top.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /status {
check_status;
access_log off;
}
}
注意:本文归作者所有,未经作者允许,不得转载