
Connection Draining = 대상(Target)을 LB에서 빼거나 비정상일 때, 기존 연결/요청을 일정 시간까지 “부드럽게” 마무리하는 메커니즘.
ALB/NLB에선 Target Group의deregistration_delay로 설정(기본 300초). (AWS 문서)
deregistration_delay.timeout_seconds(초). 기본 300초, 0–3600초 범위. 상태는 draining → unused 로 전환됩니다. (AWS 문서)deregistration_delay) 동안 완료되지 않으면, 시간 만료 시 처리(NLB는 옵션에 따라 종료 가능).deregistration_delay.timeout_seconds
unused로 바꾸기 전까지 기다리는 시간deregistration_delay.connection_termination.enabled
true, 그 외는 기본 false (필요 시 켜기). (AWS 문서)참고: 드레이닝은 대기 시간을 의미합니다. 연결이 살아 있는 한, Idle timeout(비활성 연결 제한)에도 영향을 받습니다 — ALB 기본 60초, NLB TCP 기본 350초. (AWS 문서)
드레이닝 중이라도 데이터 전송이 멈추면 Idle timeout으로 연결이 닫힐 수 있음.
따라서 드레이닝 시간 ≥(크게) 예상 처리시간, Idle timeout ≥(조금) 예상 비활성 간격 으로 튜닝하세요.
draining, 완료 시 unused. 콘솔/CLI/CloudWatch로 확인. (AWS 문서)HealthyHostCount, RequestCountPerTarget, TargetResponseTime, 5xx/Error 비율, Access Logs 등.connection_termination.enabled) 검토. (AWS 문서)IP 타깃 재등록 안 됨: 같은 IP를 바로 다시 등록하려면 드레이닝 완료까지 대기가 필요합니다. (AWS 문서)
드레이닝이 오래 걸림:
장시간 연결이 많음: Idle timeout 상향, 필요 시 최대 60분까지 드레이닝(상한) 고려. (repost.aws)
# (공통) 드레이닝 시간 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
timeout_seconds(기본 300초) 적정화 (AWS 문서)connection_termination.enabled=true (AWS 문서)draining 상태가 되며, 새 요청은 우회됩니다. (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 ..."