AWS ALB — TG — ASG — EC2 구조의 서비스에 대해 health check 설정 자세히 살펴보기

Namhoon Kim
3 min readSep 3, 2020

AWS 클라우드 위에 서비스를 구성하는 경우 우리는 일반적으로 ALB — TG — ASG — EC2 구조로 서비스를 운영하게 됩니다. 클라이언트의 api 요청에 대해 성공적인 응답을 주기 위해서는 health check 잘 설정하여 문제 있는 EC2 를 제거 시켜야 하는데요, 어떤 설정값들이 있는지 자세히 알아보도록 하겠습니다.

ALB 에는 따로 health check 설정이 없고, ALB 에 설정된 각각의 Target group 에서 health check 규칙을 설정하게 됩니다.

Target group 에 EC2 가 등록되면 매 interval 마다 health check 를 수행하게 됩니다. 설정된 path 로 HTTP GET 요청을 보내며 success code 응답 (200) 을 받지 못하거나 timeout 이 지나면 fail 로 간주됩니다. 검사 결과 값이 연속적으로 Healthy threshold 만큼 success 가 나올 경우 healthy 상태로, Unhealthy threshold 만큼 Fail 이 나올 경우 Unhealthy 상태로 변경됩니다. Unhealthy 상태일 경우에는 트래픽을 받지 않습니다. 주의할 점은 threshold 는 연속값 (consecutive) 인 점입니다. 만일 health check 결과가 성공 -> 실패 -> 성공 -> 실패 로 계속 이어진다면 해당 EC2 는 상태값이 변경되지 않습니다.

트래픽 처리를 안정적으로 하기 위해서 보통 Unhealthy threshold 는 가능한 작게 설정하고, Healthy threshold 는 Unhealthy threshold 보다 좀 더 크게 가져갑니다. (특별히 어떤 값을 세팅해야 할 지 고민된다면 default 값인 unhealthy 2, healthy 5 를 사용하면 됩니다) 이렇게 값을 적용하면 투입시킬때는 확실히 검증하고, 조금이라도 이상 증후가 있을 경우 바로 제거합니다.

Auto-scaling group 에도 Health check 설정이 있습니다. ASG 는 비정상 인스턴스를 자동으로 종료 시키는데요, 기본적으로 EC2 check 를 하고 선택시 ELB 체크를 추가할 수 있습니다. ELB 옵션을 선택하면 Health check grace period 를 설정할 수 있습니다. EC2 instance 의 application 서버가 뜨는 시간이 오래 걸린다면 grace period 설정을 적용하면 해당 시간 (초) 내에 Unhealthy 로 간주된 EC2 에 대해 ASG 가 종료를 유예 시켜 줍니다. grace period 내에도 Health check 가 성공해 healthy 상태로 인스턴스가 있다면 트래픽이 유입 됩니다.

(혹시 틀린 내용이 있다면 댓글로 부탁드립니다!)

--

--