TOMCAT 설정을 알아보자

TOMCAT은 JAVA WAS(Web Application Server)에서 가장 많이 사용되고 있다.1 

많이 사용되는 이유는 OpenSource(무료)며, 많은 Committers의 참여로 주기적인 패치가 이루어지고 쉬운 설치 JAVA 언어와의 좋은 궁합 등이 있다.

Tomcat을 운영에서 사용하기 위하여 몇 가지 설정 변경이 필요하다.

Tomcat Logging

Tomcat Logger는 JULI(Java Logging Implimentation)이라는 자체 구현체를 제공한다.
기본적으로 Apache Commons Logging 기반으로 구현되어 있고(java.util.logging 사용) extra 패키지를 통해 Log4j, logback 등으로 변경이 가능하다.

기본 설정은 $CATALINA_BASE/conf/logging.properties 파일을 로딩하여 적용한다.

Logging 종류

  • JAVA Logging API : Application당 로깅 설정을 제어하기 위해 java.util.logging 기반의 구현체 JULI 사용 - localhost.yyyy-MM-dd.log 형식의 파일명을 가짐
  • Servlets logging API : javax.servlet.ServletContext.log(…)를 통해 메시지를 때 사용 - manager.yyyy-MM.dd.log 형식의 파일명을 가짐
  • Console : tomcat 운영시 출력되는 STDERR/STDOUT - catalina.out 형식의 파일명을 가짐
  • Access Logging : AccessLogValve 또는 ExtendedAccessLogValve에서 생성되는 로그 - access_log.yyyy-MM-dd.txt 형식의 파일명을 가짐

Sessing

HTTP 세션을 생성 관리해주는 sessiong manager로 Context안에 설정이 안 되어 있는 경우 자동으로 기본 설정값에 의해 생성된다.(기본값 : org.apache.catalina.session.StandardManager)

<Manager classname="org.apache.catalina.session.StandardManager" />

Session Manager 종류

  • StandardMnager : 기본 설정. 한 개의 instance를 사용하는 경우만 적용 가능 - org.apache.catalina.session.StandardManager
  • PersistentManager : 디스크 또는 DB에 세션을 Persist. 세션 스와핑과 장애 대처(fault tolerance) - org.apache.catalina.session.PersistenManager
  • DeltaManager : All-to-All 방식 Session Replication 기능 구현 - org.apache.catalina.session.DeltaManager
  • BackupManager : Primary-Secondary Sessiont Replication 기능을 구현 - org.apache.catalina.session.BackupManager 2

Tomcat Clustering

Tomcat Clustering을 위해서는 $CATALINA_BASE/conf/server.xml의 또는 에 다음과 같은 설정을 한다.

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

아래는 설정 샘플3이다.

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                channelSendOptions="8">
  <Manager className="org.apache.catalina.ha.session.DeltaManager"
          expireSessionsOnShutdown="false"
          notifyListenersOnReplication="true"/>

   <!-- 멀티캐스트 포트(45564) 필요에 따라 변경 -->
 <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"/>
   <!-- replication 메시지 수신 포트는 4000 - 4100 사이 -->
   <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"/>

 <!-- war 를 하나에 반영하면 클러스터에 자동으로 배포되는 FarmWarDeployer 기능시에만 필요
 <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.ClusterSessionListener"/>
</Cluster>

session Cluster

  • DeltaManager : Small cluster
  • BackupManager : Large cluster

참고자료

  1. Enterprise 환경에서 Tomcat 운영하기
  2. 2017년기준 JAVA 어플리케이션 서버 사용율
  3. Tomcat8 기준 세션 설정
  4. Tcomat 세션 클러스터링 설정


Posted by lahuman