세션 클러스터링 방법
세션클러스터링 방법
- 클러스터링(세션서버) 방법 : RMI/SOCKET 방식, backup 지정
- 세션 라우팅, 세션서버, 혼합방식(세션라우팅 + 세션서버) 설명
- 세션서버 및 분산세션 설정 각 항목값 설명.
- servlet engine의 환경설정(container.xml, WEBMain.xml)에 포함되는
- session timeout 값과 webcommon.xml, web.xml 에서 지정하는 session timeout 과의 관계
1) 세션 메니저와 웹 컨테이너간의 통신방식 (RMI / SOCKET)
① JEUS 4.0 이전 버전에서는 RMI 방식이 사용되었다. 이 방식은 firewall 이 사용되는 환경에서
문제점을 야기시켰다. 이러한 이유로 SOCKET 방식을 사용하게 되었다.
(JEUS 4.x Default : SOCKET)
② RMI 방식을 사용하려면 $JEUS_HOME/bin/jeus(AIX 의 경우는 jeusp) 스크립트와
JEUSMain.xml 에 <command-option> 에 다음과 같은 옵션을 설정한다
?Djeus.session.version=RMI
2) Session Server 의 설정
① Session Server 는 JEUSMain.xml 파일의 node 절 안에 하나만 존재해야 하며 여러 개의
Session Manager 를 가질 수 있다.
<jeus-system>
……
<node>
……
<session-server>
<resolution>30000</resolution>
해당시간후 세션데이터 삭제(millisec)
<pooling>
<min>10</min>
<max>20</max>
<step>2</step>
<period>60000</period>
</pooling>
<buffer-size>1024</buffer-size>
세션서버로 데이터를 전송할 버퍼(byte)
<session-manager>
<name>session1</name> 세션 메니저의 이름
<passivation-to>1800000</passivation-to>
세션 스토리지로 넘기기 전 캐시에 존재하는 시간
<removal-to>3600000</removal-to>
세션객체가 세션스토리지에서 영구삭제되는 시간
(default -1:삭제안함)
<check-to>20000</check-to>
세션데이터의 백업주기
<backup-name>session2</backup-name>
백업 세션 메니저 네임
<backup-trigger>500</backup-trigger>
백업되지 않은 세션객체가 해당 값 이상일 때 백업한다.
<operation-to>10000</operation-to>
세션 서버와 웹 컨테이너 사이의 통신 timeout
</session-manager>
</session-server>
……
</node>
……
</jeus-system>
② 각 웹 컨테이너의 WEBMain.xml 파일에 <session-server> 태그를 설정한다.
<web-container>
……
<session-cluster>
<session-server>
<server-name>session1</server-name> 주 세션서버 네임
<max>10</max>
<min>2</min>
<step>3</step>
<get-connection-timeout>120000</get-connection-timeout>
이용 가능한 새 컨넥션을 기다리는 시간
<backup-server-name>session2</backup-server-name>
백업세션서버 네임
<connect-timeout>120000</connect-timeout>
새로운 컨넥션 생성시 세션 서버와의 연결대기 시간
<read-timeout>120000</read-timeout>
세션서버로부터 데이터를 읽어오는 최대 시간
</session-server>
</session-cluster>
……
<web-container>
③ 세션서버를 사용하기 위해서는 두 장비간의 통신이 가능해야 한다. 노드네임 등을 이용하여
ping이 되는지 확인해볼 것. 만약 잘 되지 않는다면 명시적으로 제우스 메니저와 웹 컨테이너에
적어준다.
<jeus-system>
……
<node>
……
<engine-container>
……
<command-option>
-Djeus.sessionmgr.session1=tmaxi2
</command-option>
……
<engine-container>
……
</node>
……
</jeus-system>
위에서 세션 메니저의 네임은 session1 이고 노드네임이 tmaxi2 인 경우이다. 노드네임 대신
IP:JEUS_BASEPORT 형식으로 적어주어도 된다.
ex) ?Djeus.sessionmgr.session1=192.168.1.10:9736
3) Session Routing 의 설정
세션 라우팅은 웹 서버가 클라이언트의 요청을 처음 처리된 웹 컨테이너에게 전달한다.
Session ID의 끝에 처음 요청을 받은 컨테이너가 Container ID를 붙여서 이를 보고 해당 컨테이너로 요청을
전달하게 된다.
<web-container>
……
<session-cluster>
<session-routing>true</session-routing>
……
</session-cluster>
……
<web-container>
4) 혼합방식의 설정
이는 세션서버와 세션라우팅을 함께 사용하는 방법이다. 세션라우팅을 사용하는 경우는 해당 VM에 세션정보를 저장하고 있기 때문에 세션서버에서 세션정보를 가져오는 것보다 빠르다. 다만 해당 웹 컨테이너의 장애가 발생했을 경우 세션의 유실이 일어난다. 따라서 세션라우팅과 세션서버를 혼합하여 사용하는 경우는 세션정보가 해당 VM에 있는 경우는 거기에서 가져다 쓰고 없는 경우는 세션서버를 참조하기 때문에 더 나은 성능을 꾀할 수 있다.
JEUSMain.xml 에 <session-server>설정은 동일하고 WEBMain.xml파일의 <session-cluster> 하위에 <session-routing> 과 <session-server>설정을 모두 하면 된다.
5) Session Timeout 값
JEUS에서 Session Timeout 값의 설정은 다음과 같이 할 수 있고, 아래 나열한 순서대로 우선순위를 갖게 된다.
① web.xml
<web-app><session-config><session-timeout> 단위 : 분
② WEBMain.xml
<web-container><context-group><session-config><timeout> 단위 : 분
③ JEUSMain.xml (세션 서버 설정시에만 해당함)
<jeus-system><node><session-server><session-manager><remove-to> 단위 : 밀리초