무중단 롤링 배포 Nginx & Tomcat 활용 가이드

무중단 롤링 배포 with nginx & tomcat

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

DevOps

대상자

소프트웨어 개발자, DevOps 엔지니어, CI/CD 파이프라인 설계자

난이도: 중급 (Nginx, Tomcat, 스크립트 작성 기술 필요)

핵심 요약

  • 무중단 배포는 사용자 경험 향상을 위해 서비스 중단 없이 업데이트하는 방식으로, 롤링 배포 방식이 주로 사용됨
  • Nginx upstream을 통해 WAS 인스턴스를 비활성화하고, 연결 드레인을 통해 기존 연결 종료 후 새 버전 배포
  • WAR 파일 백업롤백 메커니즘을 통해 배포 실패 시 복구 가능, check_actuator_health()로 서버 상태 확인

섹션별 세부 요약

###1. 배포 전 준비

  • WAS_IPS 배열에 대상 서버 IP, WAR_PATH에 배포할 WAR 파일 경로 설정
  • scpssh를 통해 원격 서버에 파일 전송 및 배포 스크립트 실행
  • check_actuator_health() 함수로 서버 상태 확인(예: curl + jq 활용)

###2. Nginx upstream 제어

  • nginx_upstream_control.sh 스크립트를 통해 disable/enable 상태 전환
  • sed 명령어로 Nginx 설정 파일 수정 후 nginx -t 검증 및 systemctl reload nginx 적용

###3. 연결 드레인 및 WAR 백업

  • wait_for_connections_to_close() 함수로 ESTABLISHED 연결 종료 대기(최대 60초)
  • backup_war_file() 함수로 기존 WAR 파일 복사(예: cp ROOT.war backup/ROOT_20231010120000.war)

###4. 롤링 배포 실행

  • deploy_tomcat() 함수를 통해 WAR 전송 후 shutdown.shstartup.sh 재시작
  • 배포 실패 시 rollback.sh 실행 및 upstream 다시 등록(enable 상태로 복구)

###5. 예시 배포 스크립트

  • Tomcat 9.0.XX 기반 deploy.sh 스크립트: shutdown.sh → WAR 파일 이동 → startup.sh
  • WEBAPPS_DIRROOT.war 배포 후 startup.sh로 서비스 재시작

결론

  • 핵심 팁: health checkrollback 기능은 필수, wait_for_connections_to_close() 함수로 연결 종료 대기 시간 설정 필요
  • 실무 적용 예시: Jenkins로 사전 WAR 파일 주입 후, Nginx upstream 제어 스크립트 실행 → WAS별 순차 배포 수행
  • 주의사항: scpssh 명령어 사용 시 키 인증 설정 필수, nginx_upstream_control.sh 스크립트는 별도 배포 필요