무중단 롤링 배포 with nginx & tomcat
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
소프트웨어 개발자, DevOps 엔지니어, CI/CD 파이프라인 설계자
난이도: 중급 (Nginx, Tomcat, 스크립트 작성 기술 필요)
핵심 요약
- 무중단 배포는 사용자 경험 향상을 위해 서비스 중단 없이 업데이트하는 방식으로,
롤링 배포
방식이 주로 사용됨 - Nginx upstream을 통해 WAS 인스턴스를 비활성화하고,
연결 드레인
을 통해 기존 연결 종료 후 새 버전 배포 - WAR 파일 백업 및 롤백 메커니즘을 통해 배포 실패 시 복구 가능,
check_actuator_health()
로 서버 상태 확인
섹션별 세부 요약
###1. 배포 전 준비
WAS_IPS
배열에 대상 서버 IP,WAR_PATH
에 배포할 WAR 파일 경로 설정scp
와ssh
를 통해 원격 서버에 파일 전송 및 배포 스크립트 실행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.sh
→startup.sh
재시작- 배포 실패 시
rollback.sh
실행 및 upstream 다시 등록(enable
상태로 복구)
###5. 예시 배포 스크립트
- Tomcat 9.0.XX 기반
deploy.sh
스크립트:shutdown.sh
→ WAR 파일 이동 →startup.sh
WEBAPPS_DIR
에ROOT.war
배포 후startup.sh
로 서비스 재시작
결론
- 핵심 팁:
health check
와rollback
기능은 필수,wait_for_connections_to_close()
함수로 연결 종료 대기 시간 설정 필요 - 실무 적용 예시: Jenkins로 사전 WAR 파일 주입 후, Nginx upstream 제어 스크립트 실행 → WAS별 순차 배포 수행
- 주의사항:
scp
및ssh
명령어 사용 시 키 인증 설정 필수,nginx_upstream_control.sh
스크립트는 별도 배포 필요