-
클라우드에서 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 설정
아래 이미지는 생성한 이후 설정 내역을 조회한것이라서, 실제 생성할 때는 이미지의 값을 참고하면 된다.
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-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는 변경되지 않은 것을 확인할 수 있다.
반응형'NAVER Cloud' 카테고리의 다른 글
NKS (Ncloud Kubernetes Service) 에 istio 설치하기 (0) 2021.08.12 Kubernetes 에서 Cert-manager로 letsencrypt 인증서 발급/설정 (0) 2021.07.22 hadoop hdfs 데이터를 오브젝트스토리지로 마이그레이션 하기 (0) 2021.02.03 네이버클라우드에서 서버 중지/기동 스케줄링 설정-CLI (0) 2021.02.01 Cloud Function deployment package in Python (0) 2020.10.12