차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
tomcat_clustering [2024/12/05 10:24] – [클러스터링 사전 요구사항] koovtomcat_clustering [2024/12/11 14:10] (현재) – [차이점] koov
줄 1: 줄 1:
 ====== Tomcat Clsutering ====== ====== Tomcat Clsutering ======
- --- //[[koovis@gmail.com|이강우]] 2020/12/08 17:19//+ --- //[[koovis@gmail.com|이강우]] 2024/12/11 13:51// 
  
 <WRAP round important 60%> <WRAP round important 60%>
-본 문서는 Tomcat 8.x 이상에서 정상 동작함을 확인하였습니다. Tomcat 7.x 이하에서는 테스트 되지 않았습니다.+본 문서는 Tomcat 9.x 이상에서 정상 동작함을 확인하였습니다. Tomcat 7.x 이하에서는 테스트 되지 않았습니다.
 </WRAP> </WRAP>
  
줄 42: 줄 43:
 ===== TCP StaticMembership 클러스터링 ===== ===== TCP StaticMembership 클러스터링 =====
 네트워크간에 Multicast가 차단되어있어서 노드간 클러스터 확인이 되지 않는경우가 있다. 요즘 최신의 네트워크 스위치 제품들은 기본적으로 ''IGMP''가 차단되어 있는경우가 많기때문에 이런일이 빈번하다. 네트워크간에 Multicast가 차단되어있어서 노드간 클러스터 확인이 되지 않는경우가 있다. 요즘 최신의 네트워크 스위치 제품들은 기본적으로 ''IGMP''가 차단되어 있는경우가 많기때문에 이런일이 빈번하다.
-해결방법은 당연히 IGMP를 차단 해제 해주고 Multicast를 이용하면 되지만 여타 여건상 안되는경우 TCP로 ''Static Cluster Membership''을 구성하면 된다.+해결방법은 당연히 IGMP를 차단 해제 해주고 ''Multicast''를 이용하면 되지만 여타 여건상 안되는경우 TCP로 ''Static Cluster Membership''을 구성하면 된다.
  
-  - McastService Membership을 제거한다. 
-  - TCPPingInterceptor 구성 
-  - StaticMembershipInterceptor 구성 
  
-다음은 TCP StaticMember 클러스터 구성 예제 입니다.+<WRAP center round info 60%> 
 +Tomcat 9.0.17 버전 이후부터 Membership에 ''StaticMembershipService'' 가 새롭게 추가되었다. 따라서 이후 버전부터는 ''StaticMember''를 사용하는 방법이 2가지로 나뉜다. 
 +</WRAP> 
 + 
 +==== 차이점 ==== 
 + 
 +^ 항목                 ^ ''StaticMembershipService''                                        ^ ''StaticMembershipInterceptor''                                                ^ 
 +| 사용 위치            | ''<Membership>'' 요소 내에서 사용.                                 | ''<Interceptor>'' 요소 내에서 사용.                                            | 
 +| 구현 클래스          | org.apache.catalina.tribes.membership.StaticMembershipService  | org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor 
 +| 로컬 멤버 자동 식별  | 지원 (로컬 멤버를 자동으로 식별).                              | 지원하지 않음 (로컬 멤버를 명시적으로 정의해야 함).                        | 
 +| 설정 방식            | ''<Member>'' 또는 ''<LocalMember>'' 요소 사용.                         | ''<Member>'' 요소 사용.                                                  | 
 +| 설정 난이도          | 약간 복잡함.                                                   | 상대적으로 단순함.                                                         | 
 +| 멀티캐스트 탐색      | 비활성화.                                                      | 비활성화.                                                                  | 
 +==== 새로운 StaticMembershipService 를 이용하는 방법 (권장) ==== 
 + 
 +  - ''McastService Membership''을 제거하고 대신 ''StaticMembershipService'' 구성한다. 
 +  - ''TCPPingInterceptor'' 구성 - StaticMember 구성시에는 반드시 활성화 하여야 한다. 
 + 
 +<WRAP prewrap> 
 +<code xml server.xml> 
 +      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
 +               channelSendOptions="6"> 
 + 
 +        <Manager className="org.apache.catalina.ha.session.DeltaManager" 
 +                 expireSessionsOnShutdown="false" 
 +                 notifyListenersOnReplication="true"/> 
 + 
 +        <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 
 +          <!-- multicast membership --> 
 +          <!-- 
 +          <Membership className="org.apache.catalina.tribes.membership.McastService" 
 +                      address="${tomcat.cluster.member.address}" 
 +                      port="${tomcat.cluster.member.port}" 
 +                      frequency="500" 
 +                      dropTime="3000" 
 +                      /> 
 +          --> 
 +    
 +          <!-- static membership 
 +          9.0.17 이후 버전부터 새롭게 추가된 StaticMembershipService 정의부분이다. 
 +          Interceptor를 사용하지 않고 모든 클러스터 멤버를 수동으로 정의 해주면 된다. 
 +          --> 
 +          <Membership className="org.apache.catalina.tribes.membership.StaticMembershipService"> 
 +            <Member className="org.apache.catalina.tribes.membership.StaticMember" 
 +                       port="5011" 
 +                       host="10.33.0.51" 
 +                       uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/> 
 +            <Member className="org.apache.catalina.tribes.membership.StaticMember" 
 +                       port="5011" 
 +                       host="10.33.0.52" 
 +                       uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,2}"/> 
 +          </Membership> 
 + 
 +          <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
 +                    address="${tomcat.cluster.receiver.address}" 
 +                    port="${tomcat.cluster.receiver.port}" 
 +                    autoBind="100" 
 +                    selectorTimeout="5000" 
 +                    maxThreads="6" 
 +                    /> 
 + 
 +          <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 
 +            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 
 +          </Sender> 
 +          <!-- if use StaticMembership enable TcpPingInterceptor --> 
 +          <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor"/> 
 +          <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"/> 
 +        <!-- 
 +        <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> 
 + 
 +</code> 
 +</WRAP> 
 +==== 예전방식 StaticMembershipInterceptor 를 이용하는 방법 (9.0.17이전버전 - 비권장) ==== 
 + 
 +  - ''McastService Membership''을 제거한다. 
 +  - ''TCPPingInterceptor'' 구성 - StaticMember 구성시에는 반드시 활성화 하여야 한다. 
 +  - ''StaticMembershipInterceptor'' 구성 
 + 
 +다음은 ''StaticMembershipInterceptor'' 를 이용한 ''TCP StaticMember'' 클러스터 구성 예제 입니다.
  
 <WRAP prewrap> <WRAP prewrap>
 <code xml server.xml> <code xml server.xml>
         <!-- channelSendOptions 값이 6:동기 방식 8:비동기 방식         <!-- channelSendOptions 값이 6:동기 방식 8:비동기 방식
-        8:비동기 방식 사용시 Receiver의 selectorTimeout을 5000(5초) 이상으로 설정 권장 -->+        8:비동기 방식 사용시 Receiver의 selectorTimeout을 5000(5초) 이상으로 설정 권장 
 +        channelStartOptions 은 멀티캐스트 멤버쉽의 경우에만 사용하거나 가급적이면 해당 속성은 설정하지 않는다. 
 +        -->
         <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"         <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
-                 channelSendOptions="6" channelStartOptions="3">+                 channelSendOptions="6">
  
           <!-- Delta Manager -->           <!-- Delta Manager -->
줄 104: 줄 197:
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">             <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
               <!-- 자기자신 선언               <!-- 자기자신 선언
-                   9.0.17 버전 이후로는 LocalMember대신 Member로 동일하게 설해도 된다.+                   참고: Tomcat 9.0.17 이상 버전에서는 <LocalMember> 요소를 사용하여 로컬 멤버를 명시적으로 구성할 필요가 없습니다. 
 +                   로컬 멤버를 포함한 모든 클러스터 멤버는 <Member> 요소를 사용하여 정의할 수 있으며, Tomcat이 컬 멤버를 자으로 식별합니다. 
 +                   따라서 아래 LocalMember 부분은 의하지 않습니다.
                    https://tomcat.apache.org/tomcat-9.0-doc/config/cluster-membership.html#Setting                    https://tomcat.apache.org/tomcat-9.0-doc/config/cluster-membership.html#Setting
               -->               -->
 +              <!--
               <LocalMember className="org.apache.catalina.tribes.membership.StaticMember"               <LocalMember className="org.apache.catalina.tribes.membership.StaticMember"
                            domain="staging-cluster"                            domain="staging-cluster"
                            uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>                            uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>
 +              -->
  
               <!-- 고정멤버로 선언할 다른 노드 정보 -->               <!-- 고정멤버로 선언할 다른 노드 정보 -->
줄 148: 줄 245:
 ===== 참조링크 ===== ===== 참조링크 =====
   * https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html   * https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html
-  * https://indienote.tistory.com/401+  * https://tomcat.apache.org/tomcat-9.0-doc/config/cluster-membership.html
   * {{ :was:tomcat:tomcatcluster_0.pdf |}}   * {{ :was:tomcat:tomcatcluster_0.pdf |}}
  
  • tomcat_clustering.1733394258.txt.gz
  • 마지막으로 수정됨: 2024/12/05 10:24
  • 저자 koov