피드로 돌아가기
Hacker NewsDevOps
원문 읽기
HAProxy redispatch 기반 Zero-Downtime 배포로 요청 누락 0% 달성
Zero-Downtime Deployments with Docker Compose – No Kubernetes Required
AI 요약
Context
Traefik의 Docker Label 기반 서비스 정의 충돌 및 Routing Table 업데이트 지연으로 인한 404, 502 에러 발생. 특히 장애 발생 시 동일 Backend로만 재시도하는 Traefik의 한계로 인해 Graceful Shutdown 과정에서 요청 유실 불가피.
Technical Solution
- HAProxy의
option redispatch설정을 통한 장애 발생 시 타 Backend로의 즉각적인 요청 재전송 구조 설계 - Docker Compose의
deploy.replicas설정을 활용한 다중 인스턴스 구성 및 가용성 확보 - Docker DNS 기반의 서비스 디스커버리를 통한 정적 설정 기반의 단순하고 견고한 로드밸런싱 구현
docker compose up -d --wait플래그를 활용하여 Healthcheck 통과 후 트래픽을 유입시키는 순차적 Rolling Update 스크립트 적용- 기존 컨테이너 제거 후 신규 컨테이너를 하나씩 교체하는 루프 구조를 통해 최소 1개 이상의 Healthy Backend 유지
실천 포인트
1. Load Balancer 선택 시 장애 발생 요청을 다른 Backend로 재전송하는 Redispatch 지원 여부 확인
2. Rolling Update 시 컨테이너 기동과 트래픽 유입 사이의 간극을 메울 수 있는 Healthcheck 검증 단계 포함
3. 오버엔지니어링을 피하기 위해 시스템 규모에 맞는 단순하고 검증된 도구(Battle-tested tool) 우선 고려