ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클라우드에서 redis로 tomcat session 관리 구성
    NAVER Cloud 2021. 7. 19. 20:48

    서비스 가용성을 위해 서버를 이중화하여 한대의 서버에 장애가 발생해도 다른 한대에서 서비스를 제공하는 것 외에도, tomcat 을 사용하는 경우 사용자가 연결되어 있던 세션도 다른 서버로 넘겨줘야 할 필요가 생긴다. 

    이전 회사에는 미들웨어 운영팀이 있어서, 내가 tomcat을 만질일이 전혀 없었지만, 옆에서 지켜보면 session clustering을 구성하는 것은 그닥 간단하지 않은 것 같아 보였다. 

    대부분의 클라우드 사업자는 멀티캐스트를 지원하지 않기 때문에(예전에는 지원안했는데, 현재는 어떤지 확실히 모르겠음) 클라우드 환경에서는 Redis를 활용하여 세션을 관리할 수 있도록 구성한다. 

    네이버클라우드에서 LB, VM, Redis Cluster를 활용해서 세션 클러스터링 컨셉 구성을 진행해봤다. 

    먼저 CentOS 서버 2대에 tomcat을 설치하고 Proxy LB 에 연결하여 이중화 구성을 한 후 Redis Cluster를 생성했다. 

    전체적으로 이러한 구성이다. 

    1. VM에 java 설치

    java 설치는 이 링크를 참고 

    https://cleanupthedesk.tistory.com/29

     

    2. Tomcat 설치

    cd /home/download #아무데나 다운로드 받아도 상관은 없음 
    wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.59/bin/apache-tomcat-8.5.59.tar.gz
    tar zxvf apache-tomcat-8.5.59.tar.gz
    mv /home/download/apache-tomcat-8.5.59 /usr/local/lib
    
    >> 환경 설정 파일 업데이트 
    vi /etc/profile
    export JAVA_HOME=/usr/java/jdk-14.0.2
    export PATH=$PATH:/usr/java/jdk-14.0.2/bin
    PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
    CATALINA_HOME=/usr/local/lib/apache-tomcat-8.5.59
    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar
    export CATALINA_HOME
    
    source /etc/profile
    echo $CATALINA_HOME
    cd /usr/local/lib/apache-tomcat-8.5.59/bin
    ./startup.sh

    tomcat 서버에 8080 포트로 브라우저에서 접속해본다. tomcat 호랑이 그림 나오는 페이지 보이면 정상 

    2대 서버 모두 설정해준다. 

     

    3. Network Proxy Load Balancer 설정

     1) LB Target Group , Health Check 설정

    아래 이미지는 생성한 이후 설정 내역을 조회한것이라서, 실제 생성할 때는 이미지의 값을 참고하면 된다. 

    target group 설정, 알고리즘은 상황에 맞게 선택하면 된다. 
    health check 설정
     Network Proxy LB 를 생성 후 접속정보의 url 로 tomcat 서버로 접근되는지 확인한다. 

    4. Tomcat 서버에 Redis Session Manager 다운로드 및 tomcat 설정 변경 

    cd /home/download
    wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/2.0.4/tomcat-cluster-redis-session-manager.zip
     unzip tomcat-cluster-redis-session-manager.zip
    
    cd /usr/local/lib
    cp /home/download/tomcat-cluster-redis-session-manager/lib/* ./apache-tomcat-8.5.59/lib/
    cp /home/download/tomcat-cluster-redis-session-manager/conf/* ./apache-tomcat-8.5.59/conf/

    redis cluster 의 end-point 정보를 아래와 같이 확인한다. 

    서비스 이름을 클릭하거나 관리에서 redis 설정으로 들어가면 서버 endpoint를 확인할 수 있다. 
    하나의 redis endpoint 를 copy

    >> redis-data-cache.properties 수정
    vi /usr/local/lib/apache-tomcat-8.5.59/conf/redis-data-cache.properties
    redis.hosts=redisc-XXXXX.vpc-cdb.ntruss.com:6379 ## redis endpoint 추가
    
    >> web.xml 수정
    vi /usr/local/lib/apache-tomcat-8.5.59/conf/web.xml
        <session-config>
            <session-timeout>60</session-timeout> ## 60 으로 변경
        </session-config>
        
    >> context.xml 수정
    vi /usr/local/lib/apache-tomcat-8.5.59/conf/context.xml
    <Context> ## <Context> </Context> 사이에 아래 내용 추가 
    <Valve className="tomcat.request.session.redis.SessionHandlerValve" />
    <Manager className="tomcat.request.session.redis.SessionManager" />
    </Context>

    모든 설정은 완료되었으므로, tomcat 을 재기동 한다. 

     cd /usr/local/lib/apache-tomcat-8.5.59/bin
     ./shutdown.sh
     ./startup.sh
     
     tail -f /usr/local/lib/apache-tomcat-8.5.59/logs/catalina.out

    5. Test 페이지 설정 (참고 : https://1mini2.tistory.com/43

    cd /usr/local/lib/apache-tomcat-8.5.59/webapps/ROOT
    mv index.jsp index.bk
    
    >> 서버 ip와 session id를 확인할 수 있는 테스트 페이지 다운로드 
    wget https://s3.ap-northeast-2.amazonaws.com/youngwoo.lab/download/tomcat_session_test_jsp/tomcat_session_test.jsp
    
    mv tomcat_session_test.jsp index.jsp
    /usr/local/lib/apache-tomcat-8.5.59/bin/shutdown.sh
    /usr/local/lib/apache-tomcat-8.5.59/bin/startup.sh

    NPLB 의 도메인으로 브라우저에서 접속해보면 서버 ip와 세션 ip를 확인할 수 있다. 

    10.0.1.15 서버의 tomcat을 중지시키면, 10.0.1.16 서버에서 서비스를 제공하지만 세션 ID는 변경되지 않은 것을 확인할 수 있다. 

     

    반응형

    댓글

Designed by Tistory.