관리 메뉴

JIE0025

[AWS] ELB(로드밸런서) EC2인스턴스 Health Check Failed 본문

백엔드/이슈, 트러블슈팅

[AWS] ELB(로드밸런서) EC2인스턴스 Health Check Failed

Kangjieun11 2023. 5. 7. 17:56
728x90

 

✅ 개요

 

대체 왜 우리 서비스의 ELB 도메인에 접속하면 이런 링크가 뜨는걸까? 라는 생각을 지속적으로 해왔다.

왜 401이지 ? 그냥 접속해서 그런가?

 

 

두번째로 궁금했던건 
로드밸런서의 대상그룹을 통해 EC2 애플리케이션에 연결되는데 이 애플리케이션에서 상태 또한 unhealthy 한 상태라고 보여주고 있었다.

 

둘다 401을 반환하기 때문에 비슷한 이슈로 묶을 수 있을것이라 생각했었다.

그리고 오늘 이 unhealthy 이슈에 대해 해결방법을 찾아보았고, 조만간 처리할 목적으로 이 글을 적는다.

 

 


 

✅ health Check란? 

ELB가 여러대의 서버로 요청을 분산할 수 있는데,

이때 서버가 정상적으로 활동중인지 확인하기 위해 Health Check과정이 일어난다. 

 

 

🤔 서버가 정상적인지 확인하는 이유는? 

ELB(로드밸런서)를 사용하는것은 요청을 분산처리 하기 위함인데,
요청을 제대로 처리할 수 없는 인스턴스가 존재할 수 있다. 

이를 미리 알기 위해 특정 URL로 요청을 보내보고 기대하는 응답코드가 돌아오는지 확인하는것이다.

 

 

✅ 현재 ELB가 요청을 처리하는 대상그룹의 상태검사를 확인하면?

 

AWS Console > EC2 > 로드밸런서 아래에 있는 대상그룹 클릭하고

상태검사를 눌러보면,,

 

경로가 / 로 설정되어있다. 

 

이는 ELB가 
우리 애플리케이션 서버에 /요청을 보내보고, 200이 돌아오면 안전하다(Health)는 의미로 확인하기 위한 경로이다. 

 

 

 

 

현재는 / 이걸로 접근하면 401을 반환하고 있다.

 

왜냐? 모든 요청에 대해 Spring Security Filter를 타는데, 요청에 필요한 특정 정보가 없기 때문에 401을 반환할것이다.

 

 

이그림에서 401이 나온것 역시 같은 이유이다.

 

 

 

✅  원인 요약과 해결 방법

 

즉 Health Check를 할 수 있는 경로를 따로 처리하지 않았기 때문에

도메인 default url에 접속하는것과 같이 요청이 가는거고,  이게 401을 반환하는것...

 

성공코드는 200이기 때문에 Unhealth하다고 판단하는것이다.

 

 

 

가장 간단한 해결방법은

  1. 서버에서 GET /health 에 대해 200반응을 응답하게 변경하고
  2. ELB 대상그룹에서 HealthCheck를 위해 /health 경로로 요청을 보내게 하면 끝!

 

 


 

 

 

조만간 처리해야겠다 :)

 

 

 

 

https://sarc.io/index.php/aws/1728-aws-3

 

[AWS] 입문(3) - ELB (Load Balancing)

Tech Note 정보 RedEyezCuckoo 님이 작성하신 글입니다. 카테고리: [ Amazon Web Services ] 게시됨: 15 October 2019 작성됨: 15 October 2019 최종 변경: 03 December 2019 조회수: 36600 1. AWS Elastic Load Balancing  Auto Scaling Group

sarc.io