오늘은 Redis를 이용하여 Tomcat Session Clustering하는 방법을 알아보고자한다.
앞에서 작성했던 AWS DynamoDB를 이용하여 Session Clustering은 Redis보다 속도가 느리다.
Elastic Cache인 memcache와 redis가 속도가 가장 빠르며 비싸다.
<AWS 발표자료중 한장>
Tomcat은 8버전을 기준으로 하며 Clustering에 필요한 라이브러리 및 설정은 https://github.com/ran-jit/tomcat-cluster-redis-session-manager를 참고 하였다.
우선 작업순서는
1. AWS Redis를 생성
2. EC2 2대 생성(JAVA SDK8이 있는 환경)
3. Tomcat8.5를 설치
4. ALB에서 LB설정
5. https://github.com/ran-jit/tomcat-cluster-redis-session-manager 에 Download에서 latest version (2.0.4) 클릭하여 tomcat-cluster-redis-session-manager.zip 파일을 다운받는다.
6. 압축을 풀고 conf와 lib 폴더를 Tomcat 루트 폴더에 복사한다.(양쪽에 다 복사해야함)
7. github 에 나와있는데로 conf에 있는 파일들(redis-data-cache.properties, context.xml, web.xml)을 수정한다.
redis-data-cache.properties 아래 부분 수정
redis.hosts=<AWS Redis Endpoint>:<redis port>
context.xml 아래 태그 추가
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
redis-data-cache.properties 아래 부분 수정
redis.hosts=<AWS Redis Endpoint>:<redis port>
context.xml 아래 태그 추가
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
web.xml 아래 태그 추가
<session-config>
<session-timeout>60</session-timeout>
</session-config>
8. tomcat webroot에 session id를 볼수 있는 jsp파일을 생성한다.
was1 jsp
<%
out.println("was1 sessionid : "+request.getRequestSessionId());
session.setAttribute("userid","honggildong");
out.println("tomcat set session userid :: "+session.getAttribute("userid"));
%>
was2 jsp
<%
out.println("was2 sessionid : "+request.getRequestSessionId());
out.println("tomcat set session userid :: "+session.getAttribute("userid"));
%>
9. tomcat을 was1번과 was2번으로 나누어 세션아이디가 동일한지 확인한다.