본문 바로가기
FullStack/41. WEB.WAS

[TOMCAT] 톰캣을 이용한 세션 공유 설정

by nakanara 2020. 11. 2.
반응형

Apache_Tomcat_logo svg

톰캣을 이용한 세션 공유 설정

Apache, L4 등을 이용한 load balancing이 되어 있다는 전제하에 Tomcat 세션 공유를 진행합니다.

필요 Port (방화벽 오픈 필요)

PORT TCP/UDP 용도
45564 TCP,UDP 세션 공유
4000 TCP 세션 수신
  • 하나의 서버에서 작동 시 4000 외 사용할 포트가 필요합니다.

Server.xml 수정

<!-- apache jk_mod의 경우 jvmRoute값을 이용하여 사용 was 판단 -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="was1">
    <!-- channelSendOptions 비동기 세션 공유-->
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

        <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"  -- 자신의 IP
                        port="4000"     -- 수신하기 위한 port
                        autoBind="10"    -- 수신 포트에 실패 할 경우 확장할 수 10일 경우 4000 ~ 4010
                        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.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>

    ...
</Engine>
  • channelSendOptions 옵션(비동기, 동기방식, 멀티캐스트 등 옵션)
  • https://tomcat.apache.org/tomcat-8.5-doc/config/cluster.html#SimpleTcpCluster_Attributes
    (비동기: 8)
  • DeltaManager
    모든 노드에 동일한 세션 복사, 정보가 변경될 때마다 복사
    • notifyListenersOnReplication: 다른 tomcat에서 세션이 생성/소멸 이벤트 수신 여부
    • expireSessionsOnShutdown: tomcat서버가 shutdown도리 때 모든 노드의 세션을 expire 여부(default false)

web.xml 수정

<web-app>

    ... 
    <!-- 세션 복제를 위해 필요 -->
   <distributable/>

</web-app>

참고

#tomcat #세션공유 #loadbalancing #cluster

반응형