tomcat-使用redis做session_id共享

用途:tomcat集群共享session。 支持tomcat7,8,9

1、安装tomcat(2个)(仅在实验环境配置,用作验证使用)

  • 安装tomcat
unzip apache-tomcat.zip -d /service/tomcat1
unzip apache-tomcat.zip -d /service/tomcat1
  • 修改tomcat端口,保持两个实例的端口不冲突
  • 在tomcat的数据文件夹中,增加查看session ID的页面
cat > /service/tomcat1/webapps/ROOT/index.jsp <<EOF
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>获取session id</title>
</head>
<body>
    Session Id : <%= request.getSession().getId() %>
</body>
</html>
EOF
cat > /service/tomcat2/webapps/ROOT/index.jsp <<EOF
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>获取session id</title>
</head>
<body>
    Session Id : <%= request.getSession().getId() %>
</body>
</html>
EOF

2、 安装redis(端口:6379,密码passwd,IP:127.0.0.1)


3、配置tomcat使用redis共享session ID

wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/2.0.4/tomcat-cluster-redis-session-manager.zip
  • 解压解压,并复制jar文件至tomcat/lib目录中
unzip  tomcat-cluster-redis-session-manager.zip
cd tomcat-cluster-redis-session-manager
cp lib/*.jar /service/tomcat1/lib
cp lib/*.jar /service/tomcat2/lib
  • redis-data-cache.properties复制至 tomcat/conf目录中
cp conf/redis-data-cache.properties /service/tomcat1/conf
cp conf/redis-data-cache.properties /service/tomcat2/conf
  • 配置tomcat/conf/ redis-data-cache.properties 文件
#-- Redis data-cache configuration


#- redis hosts ex: 127.0.0.1:6379, 127.0.0.2:6379, 127.0.0.2:6380, ....
redis.hosts=127.0.0.1:6379


#- redis password (for stand-alone mode)
redis.password=password


#- set true to enable redis cluster mode
redis.cluster.enabled=false


#- redis database (default 0)
#redis.database=0


#- redis connection timeout (default 2000)
#redis.timeout=2000

可以配置redis-cluster集群模式,按照实例,修改对应参数即可

  • 配置tomcat/conf/context.xml文件
    <Valve className="tomcat.request.session.redis.SessionHandlerValve" />
    <Manager className="tomcat.request.session.redis.SessionManager" />
</Context>
  • 配置tomcat/conf/web.xml文件 (计数单位:分)(配置sessionID过期时间)
    <session-config>
         <session-timeout>30<session-timeout>
    <session-config>

如果项目中有配置,以项目配置为准


4、 重启tomcat后生效。

通过浏览器访问tomcat两个实例的页面,都为同一个session ID。

Session Id : 8AE6024E09FE16D1B5734C4BD7012AE2

查询redis缓存库

get 8AE6024E09FE16D1B5734C4BD7012AE2
127.0.0.1:6379> get 8AE6024E09FE16D1B5734C4BD7012AE2
"xacxedx00x05srx00<com.r.tomcat.session.management.SessionSerializationMetadatax01xbax17xdexc0oxb0
x03x00x01[x00x15sessionAttributesHashtx00x02[Bxpwx14x00x00x00x10x1cx1fxd4xa1kx1aqxd3uxfbexbffJx8cxabxsrx00x0ejava.lang.Long;x8bxe4x90xccx8f#xdfx02x00x01Jx00x05valuexrx00x10java.lang.Numberx86xacx95x1dx0bx94xe0x8bx02x00x00xpx00x00x01dn3cRsqx00~x00x03x00x00x01dn3cRsrx00x11java.lang.Integerx12xe2xa0xa4xf7x81x878x02x00x01Ix00x05valuexqx00~x00x04x00x00x0ex10srx00x11java.lang.Booleanxcd rx80xd5x9cxfaxeex02x00x01Zx00x05valuexpx01qx00~x00
sqx00~x00x03x00x00x01dn3cRtx00 8AE6024E09FE16D1B5734C4BD7012AE2sqx00~x00ax00x00x00x00wx00x00x01dn3cR" 

配置成功,前端代理nginx可以不用配置配置ip hash来保持session

原文地址:https://www.cnblogs.com/taoyuxuan/p/12145223.html