본문 바로가기
[개발] Infrastructure/Deployment

Docker 블루-그린 배포

by Devsong26 2023. 11. 17.

블루-그린 배포(Blue-Green Deployment)는 무중단 배포를 위한 기법 중 하나로, 두 개의 동일한 환경을 사용하여 배포의 리스크를 최소화하고, 빠르게 롤백할 수 있는 구조를 제공합니다. 이 방법은 특히 중단 없이 새로운 소프트웨어 버전을 배포하고자 할 때 유용합니다.

 

블루-그린 배포의 주요 개념

  • 블루 환경
    • 현재 운영 중인 프로덕션 환경입니다.
  • 그린 환경
    • 새 버전의 애플리케이션을 배포할 준비가 된 새로운 환경입니다.

 

배포 과정

  • 초기 상태
    • 블루 환경이 실제 트래픽을 처리하고 있습니다.
  • 그린 환경 준비
    • 그린 환경에 새로운 애플리케이션 버전을 배포합니다. 이 환경은 아직 실제 트래픽에 노출되지 않습니다.
  • 환경 전환
    • 새 버전이 준비되면, 트래픽을 블루 환경에서 그린 환경으로 전환합니다. 이는 종종 로드 밸런서의 설정을 변경하여 수행됩니다.
  • 모니터링 및 검증
    • 그린 환경에서 새 버전을 모니터링하고 검증합니다. 문제가 없는지 확인합니다.
  • 롤백 계획
    • 만약 새 버전에 문제가 발견되면, 트래픽을 다시 블루 환경으로 전환하여 즉각적으로 롤백합니다.
  • 그린 환경 활성화
    • 새 버전이 안정적으로 운영되면, 그린 환경이 이제 새로운 블루 환경이 됩니다. 이전의 블루 환경은 다음 배포를 위해 준비됩니다.


블루-그린 배포의 장점

  • 무중단 배포
    • 사용자에게 영향을 주지 않고 새 버전을 배포할 수 있습니다.
  • 신속한 롤백
    • 새 버전에 문제가 있을 경우, 이전 버전으로 빠르게 전환할 수 있습니다.
  • 리스크 최소화
    • 새 버전의 안정성을 보장하며, 운영 환경에서 문제가 발생할 리스크를 최소화합니다.

 

블루-그린 배포의 단점

  • 자원 요구량
    • 두 개의 완전한 환경을 유지해야 하므로, 자원(서버, 저장 공간 등)이 두 배로 필요합니다.
  • 데이터베이스 동기화
    • 데이터베이스 스키마 변경과 같은 복잡한 업데이트는 관리하기 어려울 수 있습니다.

 

블루-그린 배포는 특히 중요한 애플리케이션에 대한 신속하고 안전한 업데이트가 필요한 경우에 매우 효과적인 전략입니다.

 


 

https://developer-syubrofo.tistory.com/212 에서 셋팅한 Nginx를 이용하여 블루-그린 배포를 실습해 보겠습니다.

 

시나리오는 다음과 같습니다.

  • server2를 그린 환경으로 사용하기 위해 nginx upstream 설정에서 주석처리 후 nginx reload 합니다.
  • server2를 새 버전으로 배포 후 아래 명령어를 통해 컨테이너를 재 실행 합니다.
docker rm -f [server2 container id]

docker run -d --name server2 --network my-network -p 8080:8080 your_app
  • localhost:8080으로 API 요청에 대한 응답을 확인하고 이상이 없으면 위의 명령어에서 -p를 제거하고 내부적으로만 통신할 수 있도록 컨테이너를 재 기동합니다. 만일 새 버전의 이슈가 있다면 server1과 같은 버전으로 롤백하여 Nginx upstream 설정에 추가한 후 트러블슈팅 후 맨 처음 과정부터 다시 수행합니다.
  • nginx 설정에 server2를 upstream으로 등록하여 블루 환경으로 만들고, server1을 제거하여 새 버전으로 배포합니다. 
  • 위의 과정을 반복하여 server1도 nginx upstream 설정에 추가하여 배포를 마무리 합니다.

'[개발] Infrastructure > Deployment' 카테고리의 다른 글

Hystrix  (0) 2023.11.30
사가 패턴  (0) 2023.11.27
카나리아 배포  (0) 2023.11.17
MSA 통신 패턴 (동기, 비동기)과 Apache Kafka, Zookeeper  (0) 2022.02.27
MSA(Micro Service Architecture) 기본 개념  (0) 2022.02.26