WAS/JEUS

세션 클러스터링 방법

천본앵 2009. 2. 2. 14:34

세션클러스터링 방법
 
   - 클러스터링(세션서버) 방법 : 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>  단위 : 밀리초