2018년 9월 10일 월요일

AWS Redis와 Tomcat Session Clustering

근 두달만에 글을 쓰는것 같다 블로그에 글을 올리는게 쉽지 않다는 생각을 해본다.

오늘은 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" />

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번으로 나누어 세션아이디가 동일한지 확인한다.













AWS Redis와 Tomcat Session Clustering

근 두달만에 글을 쓰는것 같다 블로그에 글을 올리는게 쉽지 않다는 생각을 해본다. 오늘은 Redis를 이용하여 Tomcat Session Clustering하는 방법을 알아보고자한다. 앞에서 작성했던 AWS DynamoDB를 이용하여 Sessi...