728x90
Redis를 통한 세션 클러스터링을 구현하는 방법
Redis 설치 및 구성
sudo apt-get update
sudo apt-get install -y redis-server
sudo systemctl --now enable redis-server
redis-cli ping
$ redis-cli ping
PONG
JDK, NGINX, Tomcat 설치 및 구성
curl -fsSL https://raw.githubusercontent.com/anti1346/zz/main/ubuntu/install_jdk_nginx_tomcat.sh | bash
nginx 설정
vim /etc/nginx/conf.d/default.conf
upstream tomcat_servers {
server localhost:8081; # 첫 번째 Tomcat 인스턴스
server localhost:8082; # 두 번째 Tomcat 인스턴스
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://tomcat_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Tomcat 설정
server.xml 파일 설정
vim /app/tomcat/tomcat1/conf/server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
vim /app/tomcat/tomcat2/conf/server.xml
...
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
...
Redisson 라이브러리를 Tomcat에 추가
Tomcat의 lib 디렉토리에 Redisson 라이브러리를 추가합니다. Redisson은 Redis와 통신하기 위한 Java 라이브러리입니다.
Redisson 라이브러리 다운로드
wget -q https://repo1.maven.org/maven2/org/redisson/redisson-all/3.30.0/redisson-all-3.30.0.jar
wget -q https://repo1.maven.org/maven2/org/redisson/redisson-tomcat-9/3.30.0/redisson-tomcat-9-3.30.0.jar
Tomcat의 lib 디렉토리에 추가
cp -r redisson-*.jar /app/tomcat/tomcat1/lib/
cp -r redisson-*.jar /app/tomcat/tomcat2/lib/
chown tomcat.tomcat /app/tomcat/tomcat{1,2}/lib/redisson-*.jar
redisson 라이브러리 확인
ls -l /app/tomcat/tomcat1/lib/ | grep redisson
$ ls -l /app/tomcat/tomcat1/lib/ | grep redisson
-rw-r--r-- 1 tomcat tomcat 20816288 May 19 08:02 redisson-all-3.30.0.jar
-rw-r--r-- 1 tomcat tomcat 29912 May 19 08:02 redisson-tomcat-9-3.30.0.jar
728x90
Tomcat 세션 관리 설정
각 Tomcat 인스턴스의 server.xml 파일에서 세션 클러스터링을 설정합니다.
vim /app/tomcat/tomcat1/conf/context.xml
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- RedissonSessionManager 추가 -->
<Manager className="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/conf/redisson.yaml"
readMode="REDIS"
updateMode="DEFAULT"/>
</Context>
vim /app/tomcat/tomcat2/conf/context.xml
...
<!-- RedissonSessionManager 추가 -->
<Manager className="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/conf/redisson.yaml"
readMode="REDIS"
updateMode="DEFAULT"/>
...
redisson.conf 파일 편집
- Redisson 구성 파일을 작성합니다. 이 파일은 Redis 클러스터에 연결하는 방법을 정의합니다. YAML 또는 JSON 형식으로 작성할 수 있습니다.
vim /app/tomcat/tomcat1/conf/redisson.yaml
singleServerConfig:
address: "redis://localhost:6379"
database: 0
cp /app/tomcat/tomcat1/conf/redisson.yaml /app/tomcat/tomcat2/conf/redisson.yaml
테스트
세션 정보를 확인할 수 있는 JSP 테스트 파일 편집
vim /app/tomcat/tomcat1/webapps/ROOT/session_test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Server, Instance, Session, and Cookie Info</title>
</head>
<body>
<h1>Server Info:</h1>
<p>Server Name: <%= request.getServerName() %></p>
<p>Server Port: <%= request.getServerPort() %></p>
<p>Server Protocol: <%= request.getProtocol() %></p>
<p>Server Info: <%= application.getServerInfo() %></p>
<hr>
<h1>Instance Info:</h1>
<p>Classpath: <%= System.getProperty("java.class.path", ".") %></p>
<hr>
<h1>Session Info:</h1>
<p>Session ID: <%= session.getId() %></p>
<p>Creation Time: <%= new java.util.Date(session.getCreationTime()) %></p>
<p>Last Accessed Time: <%= new java.util.Date(session.getLastAccessedTime()) %></p>
<p>Max Inactive Interval (seconds): <%= session.getMaxInactiveInterval() %></p>
<hr>
<h1>Cookie Info:</h1>
<%
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
%>
<p><b>Name:</b> <%= cookie.getName() %></p>
<p><b>Value:</b> <%= cookie.getValue() %></p>
<p><b>Max Age (seconds):</b> <%= cookie.getMaxAge() %></p>
<hr>
<%
}
} else {
%>
<p>No cookies found.</p>
<% } %>
</body>
</html>
cp /app/tomcat/tomcat1/webapps/ROOT/session_test.jsp /app/tomcat/tomcat2/webapps/ROOT/session_test.jsp
Redis에서 세션 키 조회
redis-cli -h 127.0.0.1 -p 6379 KEYS "*"
$ redis-cli -h 127.0.0.1 -p 6379 KEYS "*"
1) "redisson:tomcat_session:6A00DFCE67BDA321E5AE0D29F1216473"
브라우저를 통해 세션 및 쿠키 정보 확인
http://localhost/session_test.jsp
728x90
'리눅스' 카테고리의 다른 글
[draft] apt-cacher-ng 컨테이너를 Docker Compose로 설정하는 방법 (0) | 2024.05.27 |
---|---|
[draft] Laravel 애플리케이션의 요청에 대한 로그를 파일에 기록하는 방법 (0) | 2024.05.20 |
[draft] NGINX와 Tomcat 두 개의 인스턴스를 사용하여 세션 클러스터링을 구성하는 방법 (0) | 2024.05.19 |
[draft] 우분투에 NGINX와 Tomcat 멀티 인스턴스를 설치하고 설정하는 방법 (0) | 2024.05.18 |
[draft] Vim에서 한글 깨짐 문제를 해결하는 방법 (0) | 2024.05.17 |