※Redis 서버를 따로 구성한 상황에서, 세션클러스터링을 해야하는 Tomcat에서의 설정부분을 다룬다.
1. Tomcat경로 conf 아래에 redisson.conf 를 생성해준다(원래 없는 파일)
{
"singleServerConfig":{
"idleConnectionTimeout":10000,
"pingTimeout":1000,
"connectTimeout":10000,
"timeout":3000,
"retryAttempts":3,
"retryInterval":1500,
"password":null,
"subscriptionsPerConnection":5,
"clientName":null,
"address": "redis://redis ip넘버:redis 포트넘버",
"subscriptionConnectionMinimumIdleSize":1,
"subscriptionConnectionPoolSize":50,
"connectionMinimumIdleSize":32,
"connectionPoolSize":64,
"database":0,
"dnsMonitoringInterval":5000
},
"threads":0,
"nettyThreads":0,
"codec":{
"class":"org.redisson.codec.JsonJacksonCodec"
},
"transportMode":"NIO"
}
2. Tomcat경로 conf 아래에 context.xml을 vi로 열어 다음을 추가해준다
<Manager className="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/conf/redisson.conf" readMode="REDIS"/>
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
여기서 catalina.base 경로는 Tomcat설치 경로이다.
3. Tomcat 버전에 맞게 redisson-tomcat-x-x.xx.x.jar를 다운받아 Tomcat lib경로에 넣어준다
-필자는 Tomcat 8.5를 사용하기 떄문에 redisson-tomcat-8-3.11.1.jar를 사용하였다.
4.Tomcat 버전에 맞게 redisson-all-x.xx.x.jar를 다운받아 Tomcat lib경로에 넣어준다
-필자는 Tomcat 8.5를 사용하기 떄문에 redisson-all-3.11.2.jar를 사용하였다.
에서 파일을 다운로드후 압축을 풀고 redis-data-cache.properties 파일을 톰캣 conf로, jar들을 톰캣 lib을 옮긴다.
6. redis-data-cache.properties 파일에서 redis.hosts=서버ip:redis포트 로 수정한다.
7. web.xml에서 적당하게 session 시간을 설정해준다
<session-config>
<session-timeout>200</session-timeout>
</session-config>
설정 후 재기동하고 Log를 보면 아래와 같이 redis서버와 연결이 되었다는 메세지가 출력되어있을 것이다.
edisson-netty-2-3] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redis IP:redis Port
[redisson-netty-2-3] INFO org.redisson.connection.pool.MasterConnectionPool - 32 connections initialized for 1redis IP:redis Port
5.세션클러스터링 되었는지 확인하는 방법
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.text.*"%>
<%@ page import="java.util.*"%>
<%
String RsessionId = request.getRequestedSessionId();
String sessionId = session.getId();
boolean isNew = session.isNew();
long creationTime = session.getCreationTime();
long lastAccessedTime = session.getLastAccessedTime();
int maxInactiveInterval = session.getMaxInactiveInterval();
Enumeration e = session.getAttributeNames();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Session Test</title>
</head>
<body>
<table border=1 bordercolor="gray" cellspacing=1 cellpadding=0
width="100%">
<tr bgcolor="gray">
<td colspan=2 align="center"><font color="white"><b>Session
Info</b></font></td>
</tr>
<tr>
<td>Server HostName</td>
<td><%=java.net.InetAddress.getLocalHost().getHostName()%></td>
</tr>
<tr>
<td>Server IP</td>
<td><%=java.net.InetAddress.getLocalHost()
.getHostAddress()%></td>
</tr>
<tr>
<td>Request SessionID</td>
<td><%=RsessionId%></td>
</tr>
<tr>
<td>SessionID</td>
<td><%=sessionId%></td>
</tr>
<tr>
<td>isNew</td>
<td><%=isNew%></td>
</tr>
<tr>
<td>Creation Time</td>
<td><%=new Date(creationTime)%></td>
</tr>
<tr>
<td>Last Accessed Time</td>
<td><%=new Date(lastAccessedTime)%></td>
</tr>
<tr>
<td>Max Inactive Interval (second)</td>
<td><%=maxInactiveInterval%></td>
</tr>
<tr bgcolor="cyan">
<td colspan=2 align="center"><b>Session Value List</b></td>
</tr>
<tr>
<td align="center">NAME</td>
<td align="center">VAULE</td>
</tr>
<%
String name = null;
while (e.hasMoreElements()) {
name = (String) e.nextElement();
%>
<tr>
<td align="left"><%=name%></td>
<td align="left"><%=session.getAttribute(name)%></td>
</tr>
<%
}
%>
</table>
<%
int count = 0;
if(session.getAttribute("count") != null)
count = (Integer) session.getAttribute("count");
count += 1;
session.setAttribute("count", count);
out.println(session.getId() + " : " + count);
%>
</body>
</html>
위의 jsp를 생성한 후 호출한다
<호출 목록>
Server HostName | TEST-WAS-01 |
Server IP | 10.123.45.6 |
Request SessionID | 74D2Q248A077E2B3357EH7U2AW45231G.jvm1 |
SessionID | 74D2Q248A077E2B3357EH7U2AW45231G.jvm1 |
isNew | false |
Creation Time | Wed Jun 17 11:27:21 KST 2020 |
Last Accessed Time | Wed Jun 17 11:34:09 KST 2020 |
Max Inactive Interval (second) | 1800 |
Session Value List | |
NAME | VAULE |
session:thisAccessedTime | 1592361249644 |
session:isNew | false |
session:lastAccessedTime | 1592361249644 |
session:maxInactiveInterval | 1800 |
session:isValid | true |
session:creationTime | 1592360841399 |
count | 2 |
1) 해당 테이블에서 Server HostName,Server IP, SessionID 를 따로 적어 둔 후 새로고침을 했을때 해당 값을이 고정되면서 count가 올라가는지 확인한다.
2) Server HostName,Server IP를 확인하여 현재 붙은 Tomcat을 중지한다.
3) 일정시간이 지난 후 새로고침을 했을때, Server HostName,Server IP는 바뀌고 SessionID와 count가 유지되었는지 확인한다.
4) 유지되었으면 세션클러스터링 성공!
'WEB WAS > WAS' 카테고리의 다른 글
[Tomcat] 버전별 심볼릭링크 허용설정 (0) | 2020.11.27 |
---|---|
[Tomcat] reloadable 옵션 및 주의사항 (0) | 2020.10.06 |
[Tomcat] 이중화 + Sticky 세션 (0) | 2020.06.04 |
[Tomcat] 스레드덤프 확인하기 (0) | 2020.05.20 |
[Tomcat] tomcat 에러로그[Request Entity Too Large] (0) | 2020.04.14 |