2018년 6월 3일 일요일

AWS에서 Tomcat DynamoDB로 Session 동기화 하기


aws 에서 네트웍이 멀티 케스팅을 지원하지 않는다 하여 일반적인 톰켓에서 지원 하는 session clustering을 할수 없다고 한다. 그래서 redis나 memcache, dynamodb로 session clustring하는걸 지원한다고 한다.

redis,memcach, dynamodb중 dynamodb session clustering설정을 알아보고자 한다.


여기서는 톰캣 설치 및 다운로드는 제외한다.

clustering을 하려면 aws sdk 및 dynamodb session library를 다운받아 프로젝트나 tomcat lib파일에 위치 해야 한다.

아래는 다운로드 주소:
awssdk : https://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip
aws-dynamodb-session-tomcat : https://github.com/amazon-archives/aws-dynamodb-session-tomcat/releases/download/v2.0.4/aws-dynamodb-session-tomcat-2.0.4.jar(2018월1일기준)

완료 하였으면 tomcat에 conf에 있는 context.xml파일에 아래와 같이 추가 한다.
<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
             awsAccessKey="myAccessKey"
             awsSecretKey="mySecretKey"
             createIfNotExist="true" />
</Context>

위에  myAccessKey와 mySecretKey는 부여받은 키를 등록한다.

이러면 끝

앗 그런데 세션 정보를 보고 싶다. dynamodb 테이블을 보고 싶은데. 없다 어디에 있을까???
regionid를 설정하지 않아 기본적으로 us-east-1(Virginia)region DynamoDB에 가면 Tomcat_SessionState라는 테이블이 존재 한다.

어 그럼 내가 사용하는 region에 넣으려면 어떻게 해야 하나?
아래와 같이 regionid를 넣어주면 된다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
             regionId="ap-northeast-2"
             endpoint="dynamodb.ap-northeast-2.amazonaws.com"
             createIfNotExist="true" />
</Context>

여기서 주의할점은 regionId와 endpoint를 꼭 같이 넣어줘야 한다.
하나만 있을경우에는 Session 동기화가 안된다.


앗 그런데 2번째에 accesskey와 securitykey넣는게 없다.
이럴때에는 EC2에 IAM role이 부여되었을경우 정상동작하며, role을 부여하지 않았을경우에는 accesskey와 securitykey를 넣어주자.


==2018-09-07 추가==
그런데도 세션동기화가 안되고 톰캣 로그에 session id를 못찾는다는 에러가 나온다면 dynamoDB에 쓰고 읽는 시간이 느려서 그렇다. ㅡ_ㅡ;;

DynamoDB session동기화는 autoscale 용으로 사용하기 보다는 LB의 Sticky를 이용하여 서버가 한쪽에 장애가 날때 세션이 끈기지 않도록 하는 기능으로 사용하는걸 추천한다.







댓글 없음:

댓글 쓰기

AWS Redis와 Tomcat Session Clustering

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