ELB Connection Draining

도은호·2025년 10월 7일
0

AWS SAA

목록 보기
20/46

Connection Draining = 대상(Target)을 LB에서 빼거나 비정상일 때, 기존 연결/요청을 일정 시간까지 “부드럽게” 마무리하는 메커니즘.
ALB/NLB에선 Target Group의 deregistration_delay 로 설정(기본 300초). (AWS 문서)


1) 용어 맥락: CLB vs ALB/NLB

  • Classic Load Balancer(CLB): 기능 이름이 Connection Draining. 스케일 인/교체 시, 인스턴스가 내려갈 때 진행 중 요청을 완료시킵니다. (AWS 문서)
  • ALB/NLB: 같은 개념을 Target Group 속성으로 노출 —
    deregistration_delay.timeout_seconds(초). 기본 300초, 0–3600초 범위. 상태는 drainingunused 로 전환됩니다. (AWS 문서)

2) 내부 동작

  1. Target을 deregister 하거나 비정상 판정 → 새 연결/요청은 우회.
  2. 기존 연결/요청은 계속 진행(드레이닝).
  3. 대기 시간(deregistration_delay) 동안 완료되지 않으면, 시간 만료 시 처리(NLB는 옵션에 따라 종료 가능).
  4. 진행 중 트래픽이 없으면 대기 시간을 모두 기다리지 않고 즉시 완료합니다. (AWS 문서)

3) 핵심 파라미터 & 기본값

(공통) Target Group 속성

  • deregistration_delay.timeout_seconds

    • 설명: 드레이닝에서 unused로 바꾸기 전까지 기다리는 시간
    • 범위: 0–3600초, 기본 300초. (AWS 문서)

(NLB만 추가) 연결 종료 옵션

  • deregistration_delay.connection_termination.enabled

    • 의미: 드레이닝 타임아웃 종료 시 남은 연결을 LB가 끊을지 여부
    • 기본값: UDP/TCP_UDP TG는 true, 그 외는 기본 false (필요 시 켜기). (AWS 문서)

참고: 드레이닝은 대기 시간을 의미합니다. 연결이 살아 있는 한, Idle timeout(비활성 연결 제한)에도 영향을 받습니다 — ALB 기본 60초, NLB TCP 기본 350초. (AWS 문서)


4) 배포/스케일과의 관계

  • ASG 스케일 인/롤링 교체: 드레이닝 덕분에 중단 없는 교체가 쉬워집니다. (CLB 문서 기준) Auto Scaling은 드레이닝 완료 또는 타임아웃까지 대기 후 종료합니다. (AWS 문서)
  • ECS 배포 최적화: 응답이 < 1초인 서비스면 드레이닝을 짧게(예: 5초) 잡아 배포 속도를 크게 올릴 수 있습니다. (AWS 문서)

5) Idle timeout과 함께 생각하기

  • 드레이닝 중이라도 데이터 전송이 멈추면 Idle timeout으로 연결이 닫힐 수 있음.

    • ALB: 기본 60초(1~4000초 설정 가능). (AWS 문서)
    • NLB(TCP): 기본 350초(60–6000초). 장수명 연결은 TCP keepalive 고려. (AWS 문서)
  • 따라서 드레이닝 시간 ≥(크게) 예상 처리시간, Idle timeout ≥(조금) 예상 비활성 간격 으로 튜닝하세요.


6) 상태/관측/동작 확인

  • Target가 내려갈 때 상태 = draining, 완료 시 unused. 콘솔/CLI/CloudWatch로 확인. (AWS 문서)
  • 대기가 끝나기 전에 트래픽이 0이면 즉시 완료(전부 기다리지 않음). ([Server Fault][10])
  • 관측 지표: HealthyHostCount, RequestCountPerTarget, TargetResponseTime, 5xx/Error 비율, Access Logs 등.

7) 언제 얼마로 잡을까? (가이드라인)

  • 짧은 요청(웹 API 등): 5–30초 — 배포/스케일 속도↑. (ECS 가이드 참고) (AWS 문서)
  • 업/다운로드·스트리밍·웹소켓: 수분~수십분 (최대 3600초).
  • NLB + 장수명 TCP: Idle timeout도 충분히 크게, 필요 시 연결 종료 옵션(connection_termination.enabled) 검토. (AWS 문서)

8) 자주 겪는 문제 & 해결

  • IP 타깃 재등록 안 됨: 같은 IP를 바로 다시 등록하려면 드레이닝 완료까지 대기가 필요합니다. (AWS 문서)

  • 드레이닝이 오래 걸림:

    • 백엔드 keep-alive/Idle timeout을 조정(서버가 먼저 닫도록).
    • 드레이닝 시간 단축 + (NLB면) 연결 종료 옵션 활성화. (AWS 문서)
  • 장시간 연결이 많음: Idle timeout 상향, 필요 시 최대 60분까지 드레이닝(상한) 고려. (repost.aws)


9) 설정 예시 (CLI)

# (공통) 드레이닝 시간 120초로 단축
aws elbv2 modify-target-group-attributes \
  --target-group-arn arn:aws:elasticloadbalancing:...:targetgroup/app-tg/... \
  --attributes Key=deregistration_delay.timeout_seconds,Value=120
# (NLB 전용) 드레이닝 종료 시 잔여 연결 종료
aws elbv2 modify-target-group-attributes \
  --target-group-arn arn:aws:elasticloadbalancing:...:targetgroup/nlb-tg/... \
  --attributes Key=deregistration_delay.connection_termination.enabled,Value=true

10) 체크리스트

  • 드레이닝 시간: timeout_seconds(기본 300초) 적정화 (AWS 문서)
  • NLB 종료 옵션: 필요 시 connection_termination.enabled=true (AWS 문서)
  • Idle timeout(ALB 60초 / NLB TCP 350초 기본) 재확인 (AWS 문서)
  • 배포/스케일 전략과 함께 테스트(롤링/블루그린)
  • 관측 지표로 효과 검증(요청 실패/지연/Healthy 수)

요약

  • Connection Draining = 안전한 연결 마무리 대기(기본 300초). Target는 draining 상태가 되며, 새 요청은 우회됩니다. (AWS 문서)
  • NLB타임아웃 종료 시 강제 종료 옵션이 있어 장수명 연결에 유용. (AWS 문서)
  • Idle timeout(ALB 60s / NLB TCP 350s 기본)드레이닝 시간을 함께 튜닝해야 무중단 배포·스케일이 깔끔해짐 (AWS 문서)

[10]: https://serverfault.com/questions/919335/alb-connection-draining-is-always-reaching-the-deregistration-delay?utm_source=chatgpt.com "ALB Connection Draining is always reaching the \"Deregistration ..."

profile
`•.¸¸.•´´¯`••._.• 🎀 𝒸𝓇𝒶𝓏𝓎 𝓅𝓈𝓎𝒸𝒽💞𝓅𝒶𝓉𝒽 🎀 •._.••`¯´´•.¸¸.•`

0개의 댓글