FullStack/41. WEB.WAS
[TOMCAT] 톰캣을 이용한 세션 공유 설정
nakanara
2020. 11. 2. 11:30
반응형
톰캣을 이용한 세션 공유 설정
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>
참고
클러스터 구성: http://tomcat.apache.org/tomcat-8.5-doc/config/cluster-manager.html
ChannelSendOptions: https://tomcat.apache.org/tomcat-8.5-doc/config/cluster.html#SimpleTcpCluster_Attributes
UDP 사용안 될 경우: https://lalalaho.tistory.com/37
#tomcat #세션공유 #loadbalancing #cluster
반응형