본문 바로가기
공부/서버운영관리

[tomcat] Session Cluster Configuration

by kyoung-ho 2024. 7. 2.
반응형
 

Tomcat에서 세션 클러스터를 설정하여 두 대의 웹 애플리케이션 서버(WAS)가 세션 정보를 공유할 수 있도록 하려면, 몇 가지 주요 단계를 따라야 합니다. 이 설정을 통해 한 서버에서 발생한 세션 변경 사항이 클러스터 내 다른 서버와 동기화되어, 사용자가 두 서버 중 어느 하나에 요청을 보내도 일관된 세션 상태를 유지할 수 있습니다.

1. 기본 요구사항

  • 두 서버는 네트워크를 통해 서로 통신이 가능해야 하며, 방화벽 설정에서 필요한 포트가 열려 있어야 합니다.
  • 모든 서버에 동일한 버전의 Tomcat이 설치되어 있어야 하며, 동일한 애플리케이션이 배포되어야 합니다.

2. server.xml 설정 변경

각 Tomcat 서버의 server.xml 파일을 수정하여 클러스터를 활성화하고 필요한 통신 채널을 설정합니다. 다음은 server.xml에서 클러스터를 설정하는 기본적인 예시입니다:

 
[기본구성]
 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
 
<Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
 
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564"
frequency="500" dropTime="3000"/>
 
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/>
 
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
 
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
 
</Sender>
 
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
 
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
 
</Channel>
 
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
 
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
 
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
 
</Cluster>

3. context.xml 수정

META-INF/context.xml 파일에서 세션의 지속성을 비활성화하여 클러스터 환경에서 세션 복제가 정상적으로 작동하도록 합니다.

 
<Context> <!-- Disable session persistence across restarts --> <Manager pathname=""/> </Context>

4. 서버 구성 동기화

모든 Tomcat 서버에 동일한 server.xml과 context.xml 설정이 적용되어야 합니다. 설정을 변경한 후 각 서버를 재시작합니다.

5. 네트워크 설정 확인

클러스터가 사용하는 멀티캐스트 주소와 포트가 네트워크에서 차단되지 않도록 확인하세요. 방화벽이나 라우터 설정을 검토하여 필요한 통신이 가능하도록 합니다.

6. 테스트 및 모니터링

설정을 완료한 후, 세션 복제가 제대로 작동하는지 테스트하여 클러스터가 정상적으로 기능하는지 확인합니다. 로그 파일을 모니터링하여 오류가 없는지 검토합니다.

이렇게 설정을 마치면, 두 Tomcat 서버 간에 세션 상태가 동기화되어 사용자가 한 서버에서 인증하거나 세션 상태를 변경해도 다른 서버로 자동으로 반영됩니다.

 
 
[Real 환경 구성-> 2대의 WAS서버에 각각 설정되어야한다.(단, Receiver 부분의 IP는 자기자신)]

 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOption="6">

  <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
      <Channel className="org.apache.catalina.tribes.group.GroupChannel">
         <Membership className="org.apache.catalina.tribes.membership.McastService"
                     address="(통신할려고하는 임의의 IP(상대 장비와 동일해야함))"  --> 세션클러스터를 하나로 볼때 다른 세션클러스터랑 채널IP가 동일하면 안된다!
                     port="45564"
                     frequency="500"
                     dropTime="3000"/>

         <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                   address="(자기자신)"
                   port="4010"
                   autoBind="100"
                   selectorTimeout="100"
                   maxThreads="6"/>

         <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
         </Sender>
         <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
         <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
      </Channel>

      <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
      <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

 

 

 

 

클러스터 통신을 위한 주요 설정 확인:

  1. 멀티캐스트 설정:
    • Membership 태그에서 사용된 멀티캐스트 주소 228.0.0.117와 포트 45564는 클러스터 노드 간 통신을 위해 사용됩니다. 모든 노드에서 이 주소와 포트가 네트워크에서 차단되지 않도록 방화벽 설정을 확인해야 합니다.
  2. 통신 포트 설정:
    • Receiver에서 설정된 포트 4010은 클러스터 통신을 위해 열려 있어야 합니다. 이 포트 또한 모든 노드에서 방화벽에 의해 차단되지 않도록 해야 합니다.
  3. IP 주소 설정:
    • 각 Receiver의 address는 각 서버의 실제 IP 주소로 설정되어 있어야 합니다. 이 설정이 올바른지 확인하세요. 또한 이 IP 주소가 해당 서버의 네트워크 인터페이스에 할당된 주소와 일치하는지 확인해야 합니다.

추가 확인 사항:

  • 네트워크 연결 상태: 모든 노드가 서로 통신할 수 있는지 확인하기 위해 ping이나 traceroute 같은 네트워크 도구를 사용하여 테스트해 보세요.
  • 로그 파일 검토: 클러스터가 시작될 때 발생하는 로그를 검토하여 에러 메시지나 경고가 있는지 확인하세요. catalina.out 로그 파일에서 특히 주의 깊게 살펴보세요.

결론:

위와 같이 설정했을 때, 서로 다른 두 대의 서버가 자신의 IP 주소로 Receiver를 설정하고 있으며, 멀티캐스트 주소와 포트, 그리고 TCP 통신 포트가 올바르게 설정되어 있다면, 클러스터 내에서 세션 복제와 통신이 원활하게 이루어져야 합니다. 이는 고가용성 및 부하 분산을 위한 Tomcat 클러스터 환경에서 중요한 구성 요소입니다. 만약 통신에 문제가 발생한다면, 네트워크 설정, IP 주소 할당, 방화벽 규칙 등을 재검토해야 합니다.

반응형

댓글