핵심 개념

  • Multicast
  • Session Manager in Tomcat

Multicast

Multicast는 특정 수신자 그룹에게 단순 메시지를 전송하는 방법이다. 
Tomcat에서는 Apache Tribes Pear-to-pear communication framework 를 사용한다.

Tomcat  세션 관리자 종류

 Standard Manager

 기본 세션 관리자

 Persistent Manager 

 File Store, JDBC Store 두가지 방식이 있음

 Delta Manager

 다른 인스턴스와 세션을 복제(공유) 한다.
 multicast 방식에 따라 수신자 그룹에 등록된 모든 서버들과 세션을 복제 한다.

 Backup Manager

 다른 인스턴스와 세션을 복제(공유) 한다.
 수신자 그룹에 등록된 1대의 서버만 백업을 둔다.

세션 복제 설정 방법

  1. multicast routing
  2. conf/server.xml <Cluster> 추가 
  3. web.xml <distributable /> 추가
1. Multicast routing
sudo route add -net 224.0.0.0 net netmask 244.0.0.0 dev eth0

2. conf/server.xml <Cluster> 추가

<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="228.0.0.4"
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"  <!-- 한 서버에 여러 Tomcat를 구동할 경우 Port 번호를 다르게 설정 -->
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>




참고:

  • 세션 공유가 되지 않을 경우 방화벽을 확인 해 볼 필요가 있다.(multicast 는 UDP 통신을 한다.)
  • 하나의 서버에 다수의 Tomcat를 구동할 경우 <Receiver> 의 Port는 각 서버마다 다르게 설정 해야 한다.
  • Creation of SecureRandom instance for session ID generation  할 때 시간이 올래 걸리면 
    -Djava.security.egd=file:/dev/./urandom 설정을 추가 한다.


'서버 설정' 카테고리의 다른 글

Centos 6.5 에서 6.6 업그레이드 이후 문제점  (0) 2014.11.09

+ Recent posts