Middleware/Setting

[Tomcat] Tomcat 7버전 Clustering

cocologue 2021. 2. 27. 23:25
SMALL

[테스트환경]

  - HostOS : Windows10

  - GuestOS : CentOS 6.7

  - JDK : OpenJDK 1.7.0_251

  - WEB : Apache/2.2.31 (httpd-2.2.31)

  - WAS : Apache-Tomcat-7.0.90

 

[내용]

​  - 설정파일 : conf/server.xml

 

  1) 기본 server.xml에 있는 설정 주석제거 (<!-- -->제거)

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

  2) 주석 해제한 곳 아래에 설정 추가

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
  <Manager className="org.apache.catalina.ha.session.BackupManager"
           expireSessionsOnShutdown="false"
           notifyListenersOnReplication="true"/>
  <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    <Membership className="org.apache.catalina.tribes.membership.McastService"
                address="①225.0.0.30" port="45564"
                frequency="500" dropTime="3000"/>
    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
      <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
    </Sender>
    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
              address="②auto" port="③4001" autoBind="100"
              selectorTimeout="5000" maxThreads="6"/>
      <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"/>

  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/tmp/war-temp/"
            deployDir="/tmp/war-deploy/"
            watchDir="/tmp/war-listen/"
            watchEnabled="false"/>

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

  3) 애플리케이션 WEB-INF/web.xml 에 태그 추가

<distributable/>

① 클러스터링시 사용할 멀티캐스트 IP 작성

② 서버의 IP(여기서는 GuestOS IP) 작성 (auto 사용 시 /etc/hosts 설정을 default로 가져오므로, 설정 되어있는지 확인 필요)

③ 클러스터링 Port 작성, 인스턴스별로 해당 포트는 다르게 사용해야함 (unique 값)

 

근데 솔직히 Tomcat 7 에서 클러스터링 잘 되는지 모르겠다... 일단 세션이 안끊기고 잘 넘어는 가는데...
세션 복제에 시간이 너무 오래걸려서 세션을 잃어버리는게 한 두번이 아닌것같다...
세션 클러스터링 해서 사용해야 하는 서비스는 안정성에서 JBoss EAP나 WildFly 쓰는게 더 나아보인다.
아니면 7버전이 문제일지도 모르고.. 8버전도 테스트 해 봐야지...

 

내가 테스트를 잘 못 했나 싶어서 다시 테스트 해봤는데, 클러스터링이 잘 안돼서 세션을 잃어버리는게 아니고..
세션클러스터링 기능을 집어 넣으니까 기동시간이 엄~청 길어져서... 내가 로그 잘 안보고 다른 인스턴스를 죽여서 그런거였다.
일단 톰캣 클러스터링은 무죄이긴 한데, 기동시간 길어지는건... 리스크가 큰 것 같다.
지금 애플리케이션이라고 해봤자 세션 체크하는 jsp 하나뿐인데 이정도면.... 큰 애플리케이션 올라가면 큰일날듯...ㅋㅋㅋ
작은 애플리케이션을 클러스터링 없이 사용할거면 그 때 Tomcat 쓰는게 바람직 하겠다. 

혹시나 해서 VM 메모리 올리고 다시 해봤는데, 기동 시간이 그나마 좋아지기는 한다...

 

2020. 4. 24. 14:03 Naver Blog Backup
반응형
LIST