본문 바로가기
클라우드 및 서버

Apache HTTPD 서버에서 무중단 배포

by 플라퉁 2024. 8. 13.
728x90
반응형

 

 

 

Apache HTTPD 서버에서 무중단 배포(Zero Downtime Deployment)를 수행하려면, 웹 서버에 요청이 들어오고 있는 동안에도 기존 연결이 끊기지 않고 새로운 애플리케이션 버전을 배포할 수 있어야 합니다. 이를 달성하기 위해 다양한 방법을 사용할 수 있습니다. 대표적인 방법은 Blue-Green DeploymentRolling Deployment입니다.

 

1. Blue-Green Deployment

 

Blue-Green Deployment는 두 개의 동일한 환경(Blue와 Green)을 준비해 두고, 현재 운영 중인 환경을 전환하여 배포하는 방법입니다.

설정 방법:

1. 두 개의 환경 준비 (Blue & Green):

  • 동일한 설정으로 두 개의 웹 서버 환경을 준비합니다.
  • 예를 들어, /var/www/html이 Blue 서버이고 /var/www/html_new이 Green 서버입니다.

 

2. 트래픽 전환 설정:

  • httpd.conf 또는 vhost.conf 파일에서 DocumentRoot를 변경할 수 있습니다.
  • 처음에는 Blue 환경이 운영 중이므로 /var/www/html을 DocumentRoot로 설정합니다.
DocumentRoot "/var/www/html"
 
 
 
3. 새로운 애플리케이션을 Green 서버에 배포:
  • 애플리케이션의 새로운 버전을 /var/www/html_new에 배포합니다.

 

4. Apache 재로드 (Reload):

  • 설정을 변경하여 Green 환경으로 전환하고 Apache를 재로드합니다.
  • DocumentRoot를 Green 환경으로 변경합니다.
DocumentRoot "/var/www/html_new"
  • Apache 재로드:
sudo systemctl reload httpd
 
 
5. 롤백:
  • 문제가 발생하면, 다시 Blue 환경으로 전환하여 롤백할 수 있습니다.

 

2. Rolling Deployment

 

Rolling Deployment는 서버의 일부를 점진적으로 업데이트하여 전체 배포를 완료하는 방법입니다. 이 방법을 통해 일부 서버는 새로운 버전을 사용하고, 나머지 서버는 기존 버전을 사용하게 됩니다.

설정 방법:

  1. 서버 그룹 분할:
    • 여러 대의 웹 서버를 사용하는 경우, 서버를 그룹으로 나눕니다.
    • 각 그룹에 대해 순차적으로 배포를 진행합니다.
  2. Load Balancer 사용:
    • Apache HTTPD의 앞단에 Load Balancer를 사용하여 트래픽을 여러 서버에 분산시킵니다.
    • 배포 중인 서버를 Load Balancer에서 제외하고, 업데이트 후 다시 추가합니다.
  3. Rolling Update:
    • 각 서버 그룹에 대해 차례로 애플리케이션을 배포합니다.
    • 서버 그룹의 업데이트가 완료되면, 다음 그룹으로 넘어갑니다.
    • 모든 서버 그룹의 업데이트가 완료되면 배포가 끝납니다.

 

3. Graceful Restart를 통한 무중단 배포

 

Apache HTTPD 서버는 graceful 명령어를 사용하여 연결을 끊지 않고 설정을 재로드할 수 있습니다.

설정 방법:

1. 애플리케이션 업데이트:

  • 애플리케이션의 새로운 버전을 기존 위치에 덮어씁니다.

2. Graceful Restart:

  • Apache를 graceful 모드로 재시작합니다. 이 명령어는 기존 연결이 끝날 때까지 기다린 후, 새로운 설정으로 서버를 재시작합니다.
sudo apachectl graceful

 

또는

sudo systemctl reload httpd
 
이 방법을 사용하면, 현재 연결된 사용자는 요청을 마칠 때까지 기존 버전의 애플리케이션을 사용하고, 새로운 요청부터는 새로운 버전이 적용됩니다.

 

4. Reverse Proxy로 트래픽 라우팅

 

Apache HTTPD를 Reverse Proxy로 설정하여 백엔드 서버로 트래픽을 라우팅하고,

배포 시점에 트래픽을 다른 서버로 전환할 수 있습니다.

설정 방법:

1. Reverse Proxy 설정:

  • Apache의 httpd.conf에 Reverse Proxy 설정을 추가합니다.
ProxyPass / http://backend_server1/ 
ProxyPassReverse / http://backend_server1/

 

2. 서버 전환:

  • 새로운 버전을 배포한 서버로 트래픽을 전환합니다.
ProxyPass / http://backend_server2/ 
ProxyPassReverse / http://backend_server2/

 

3. Apache 재로드:

  • Apache를 재로드하여 설정 변경을 적용합니다.
sudo systemctl reload httpd

5. 기타 고려 사항

  • 세션 관리: 무중단 배포 시 세션이 유지되도록 세션을 공유하거나 Redis와 같은 외부 세션 저장소를 사용합니다.
  • 데이터베이스 마이그레이션: 데이터베이스 스키마 변경이 필요한 경우, 배포 전에 호환성 있는 방식으로 점진적으로 변경합니다.
  • 모니터링: 배포 중과 배포 후 시스템 상태를 모니터링하여 문제가 발생하면 즉시 대응할 수 있도록 합니다.

이와 같은 방법들을 통해 Apache HTTPD 서버에서 무중단 배포를 구현할 수 있습니다. 배포 방법은 서버 구조와 애플리케이션 아키텍처에 따라 선택할 수 있으며, 가장 적합한 방법을 도입하는 것이 중요합니다.

 

 

 

728x90
반응형

댓글