리버스 프록시 Session Clustering

cloud·2024년 11월 13일
0

Reverse Proxy

목록 보기
4/5

모든 설정은 Tomcat에서 진행

1. 클러스터링 기능 활용하기

/conf/server.xml 에 해당 내용 추가 (Engine 태그 안에)

<Engine name="Catalina" defaultHost="localhost">
    ...
    <!-- 클러스터 설정 추가 -->
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
        <!-- 세션 복제 시 사용되는 멤버 설정 -->
        <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"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>
            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
        </Channel>
        
        <!-- 세션 복제 관리자 설정 -->
        <Manager className="org.apache.catalina.ha.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 notifyListenersOnReplication="true"/>

        <!-- 클러스터 리스너 설정 -->
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    </Cluster>
</Engine>

Multicast (Membership) 포트
Tomcat 인스턴스들 간에 그룹 통신을 위해 사용되는 포트
모든 Tomcat 인스턴스는 동일한 멀티캐스트 포트를 사용

Receiver 포트
Tomcat 인스턴스들 간에 세션 복제를 위한 TCP 통신에 사용되는 포트
모든 Tomcat 인스턴스에서 동일하게 설정

2. Sticky Session 설정 (선택사항)

<Proxy "balancer://mycluster">
    BalancerMember "ajp://localhost:8009" route=tomcat1
    BalancerMember "ajp://localhost:8010" route=tomcat2
    ProxySet stickysession=JSESSIONID
</Proxy>

3. Tomcat의 context.xml 설정(필수)

context.xml 파일에서 세션 복제 관련 설정을 해야 한다

<Context>
    <!-- 세션 복제를 위한 설정 -->
    <Manager className="org.apache.catalina.ha.session.DeltaManager"
             expireSessionsOnShutdown="false" />
</Context>

DeltaManager: Tomcat에서 세션 복제를 위해 사용하는 기본 세션 매니저
expireSessionsOnShutdown="false": 서버가 종료될 때 세션을 만료시키지 않도록 설정하여 다른 서버로 세션을 안전하게 복제할 수 있게 한다

4. index.jsp 테스트코드

<%@ page language="java" %>
<%
    HttpSession session = request.getSession(true);

    // 세션에 저장할 데이터 생성 또는 갱신
    String username = (String) session.getAttribute("username");
    if (username == null) {
        username = "User-" + System.currentTimeMillis();
        session.setAttribute("username", username);
    }

    // 세션 ID와 세션에 저장된 데이터 출력
    out.println("Session ID: " + session.getId() + "<br>");
    out.println("Username: " + username + "<br>");
%>

index.jsp에 해당 코드 넣고 세션 클러스터링 테스트

0개의 댓글

관련 채용 정보