https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html
https://tomcat.apache.org/tomcat-8.5-doc/config/cluster.html
https://sarc.io/index.php/tomcat/111-tomcat-session-cluster-1
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Cluster
channelSendOptions="8"
channelStartOptions="3"
jvmRoute : apache mod_jk의 경우 jvmRoute 값을 이용하여 사용 was 판단
설정시 각 JSESSION_ID의 끝에 tag가 설정됨
ex) 5364B126FE79474FE1CA714D4D104825.tomcat1
channelSendOptions : 세션 공유 방식 설정. 동기 방식 6. 비동기 방식 8(디폴트)
channelStartOptions : 클러스터에 사용하는 channel 개체에 대한 시작 및 중지 플래그 설정
멀티캐스팅 없이 서버 시작하려면 3으로 지정
<Manager
className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true" />
종류 | 설명 |
org.apache.catalina.session.StandardManager | 가장 기본적인 Manager 로 하나의 Tomcat 인스턴스에만 유효함 |
org.apache.catalina.session.PersistentManager | Session persistence 를 위하여 파일시스템 혹은 DB 를 사용 |
org.apache.catalina.ha.session.DeltaManager | Cluster 환경에서 사용하며, cluster 간에 모든 session 을 replication |
org.apache.catalina.ha.session.BackupManager | Cluster 환경에서 사용하며, 정해진 backup 인스턴스로만 replication |
※ BackupManager는 아직 DeltaManager만큼 검증되지 않았다고 함
expireSessionsOnShutdown : tomcat 서버가 shutdown될 때 모든 노드의 모든 세션들을 expire할지 여부.
디폴트는 false
notifyListenersOnReplication : 다른 tomcat에서 세션이 생성, 소멸될 때 알림 수신 여부
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
Channel : 서로 다른 tomcat 간의 메시지 송수신에 관련된 하위 Component를 그룹핑
Sender : 한 노드에서 다른 노드로 네트워크를 통해 전송되는 모든 아웃바운드 연결 및 데이터 메시지 관리
노드에서 클러스터로 메시지를 보내는 역할
Transport : 기본적으로 'org.apache.catalina.tribes.transport.nio.PooledParallelSender'를 사용하지만 non-blocking 방식으로 동시에 여러 노드로 메시지를 보낼 수도, 하나의 노드에 여러 메시지를 동시에 보낼 수도 있음
'org.apache.catalina.tribes.transport.bio.PooledMultiSender'는 blocking 방식 사
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.56.101"
port="3100"
autoBind="0"
maxThreads="6"
selectorTimeout="5000" />
https://tomcat.apache.org/tomcat-8.5-doc/config/cluster-receiver.html
Receiver : 클러스터로부터 메시지를 수신하는 역할을 하며,
blocking 방식인 'org.apache.catalina.tribes.transport.bio.BioReceiver'와
non-blocking 방식인 'org.apache.catalina.tribes.transport.nio.NioReceiver'를 지원
Tomcat에서는 스레드 기아 상태에 빠지지 않고 클러스터를 확장할 수 있도록 non-blocking 방식을 추천함
제한된 스레드 수로 많은 양의 메세지를 처리할 수 있으며, 기본 규칙은 노드 당 1개의 thread를 할당
Address : 현재 장비의 ip
port : 클러스터 수신 포트. 기본값은 4000.
포트 충돌을 피하기 위해 Receiver는 자동으로 범위 내에서 사용 가능한 포트에 바인딩 함.
port <= bindport < port+autobind
autoBind : 수신 포트 변경 범위. 기본값은 100. 수신 대상이 고정일 때 0으로 설정
maxThreads : Receiver 스레드 풀의 최대 스레드 수. 기본값은 15
selectorTimeout : NioRecever의 polling 대기 시간. 기본값은 5000(ms)
※ polling : 브라우저가 일정한 주기로 HTTP 요청을 보내는 방식
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor" staticOnly="true"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
<Member className="org.apache.catalina.tribes.membership.StaticMember"
host="192.168.56.102"
port="3100"
uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2}" />
</Interceptor>
https://tomcat.apache.org/tomcat-8.5-doc/config/cluster-interceptor.html
사용 가능한 Interceptor
org.apache.catalina.tribes.group.interceptors.TcpFailureDetector |
org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor |
org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor |
org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator |
org.apache.catalina.tribes.group.interceptors.OrderInterceptor |
org.apache.catalina.tribes.group.interceptors.SimpleCoordinator |
org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor |
org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor |
org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor |
org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor |
org.apache.catalina.tribes.group.interceptors.GzipInterceptor |
org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor |
org.apache.catalina.tribes.group.interceptors.EncryptInterceptor |
Interceptor : 메시지와 멤버십 알림을 위한 인터셉터 지원
org.apache.catalina.tribes.group.interceptors.TcpFailureDetector 뒤에 org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor를 작성하면 동적 멤버십 외에 정적 멤버십 지원 가능
host : 클러스터링 할 서버 장비 ip
세가지 형식으로 작성 가능.
1) ip : 123.123.1.23
2) hostname : tomcat1.domain.com 또는 tomcat1
3) 문자열 형식의 byte 배열 : {216,123,12,3}
port : 클러스터 수신 포트
uniqueId : 정적 멤버에 대한 범용 uniqueId. 문자열 형식의 16 byte 배열로 작성.
ex) {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
https://tomcat.apache.org/tomcat-8.5-doc/config/cluster-valve.html
Valve : 'org.apache.catalina.ha.ClusterValve'를 구현한 객체로 일반적인 톰캣 Valve와 다르지 않음
HTTP 요청에 대한 호출 체인 인터셉터
'org.apache.catalina.ha.tcp.RelicationValve' : HTTP Request가 끝나는 시점에 데이터를 복제할지 말지 결정하도록 클러스터에 알리는 역할
'org.apache.catalina.ha.session.JvmRouteBinderValve' : mod_jk 사용중 failover시 세션 id에 저장한 jvmWorker 속성을 변경하여 다음 request부터는 해당 노드에 고정
fallback 기능을 원하는 경우 이 Valve는 활성화 x.
장애 조치를 유지하고 mod_jk가 중단된 노드를 계속 검색하지 않아도 되도록하려면 이 Valve를 사용
filter : 알려진 확장자나 url의 경우 이 Valve를 사용하여 요청이 이 필터 패턴과 일치하면 클러스터는 세션 변경이 없다고 가정
<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"/>
https://tomcat.apache.org/tomcat-8.5-doc/config/cluster-deployer.html
FarmWarDeployer : 클러스터의 다른 노드에서 어플리케이션 deploy, undeploy 가능
호스트 레벨의 클러스터에서만 구성 가능
tempDir : 클러스터에서 WAR 다운로드시 바이너리 데이터를 저장할 임시 디렉토리
절대경로 이름 또는 ${CATALINA_BASE} 디렉토리에 상대 경로 이름 지정 가능
deployDir : 어플리케이션을 배포하는 배포 디렉토리
절대경로 이름 또는 ${CATALINA_BASE} 디렉토리에 상대 경로 이름 지정 가능
이 속성은 호스트의 appBase와 동일한 값이어야 함
watchDir : 어플리케이션의 변경(추가/수정/삭제)을 감시하는 디렉토리
절대경로 이름 또는 ${CATALINA_BASE} 디렉토리에 상대 경로 이름 지정 가능
watchEnabled가 false인 경우 이 속성은 적용되지 않음
watchEnabled : 어플리케이션의 변경 사항을 감시하려면 true로 설정. 기본값은 false
https://tomcat.apache.org/tomcat-8.5-doc/config/cluster-listener.html
ClusterListener : 클러스터 내 다른 노드의 메시지 수신
DeltaManager를 사용할 경우 Cluster 개체를 통해 메시지를 수신하고 'org.apache.catalina.ha.session.ClusterSessionListener'를 통해 Manager에 메시지 전달
'WAS > TOMCAT' 카테고리의 다른 글
5. tomcat 클러스터링 (0) | 2023.07.14 |
---|---|
4. Connector 속성 정의 (server.xml) (0) | 2023.07.14 |
3. 서비스 포트 변경 (0) | 2023.07.14 |
2. JAVA 버전 변경 (0) | 2023.07.14 |
1. 설치 및 버전 확인 (0) | 2023.07.14 |