tomcat8-reids集群+session共享

钢枪 1年前 ⋅ 1146 阅读

由于项目需要需要做一个tomcat8+redis 的session共享的这么一个构架,尽量的去减少代码修改

网上找了一大堆的文章和资源基本都是扯淡的,大部分根本用不了,看着按照步骤做就行,其实会遇到各种各样的问题,最常见的一个就是tomcat7的集群搭建 兼容到tomcat8上因为2019年之前官方还没有出tomcat8的兼容班,都是以前的文章各种问题

不吐槽了,直接来干货吧

首先,申明一下tomcat8的兼容jar包官网已经有了,只不过都是英文,所以搜索很多都寥寥无几!拿下来官网的api进行翻译修改的。很吃力哦。。

  • 1 下载官网的依赖包

wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/3.0.1/tomcat-cluster-redis-session-manager.zip

  • 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;
    }
}

全部评论: 0

    我有话说: