일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 공부일지
- C++
- 1과목
- 프로그래머스
- 문제풀이
- programmers
- 백준알고리즘
- CJ UNIT
- 코딩봉사
- softeer
- SQL
- 백준 알고리즘
- python
- java
- MYSQL
- 정보처리산업기사
- kotlin
- 백준
- 자바
- 시나공
- 스프링
- 데이터베이스
- SW봉사
- 소프티어
- 코틀린
- 알고리즘
- BFS
- 코딩교육봉사
- 회고
- 파이썬
- Today
- Total
JIE0025
[AWS] ELB(로드밸런서) EC2인스턴스 Health Check Failed 본문
✅ 개요
대체 왜 우리 서비스의 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하다고 판단하는것이다.
가장 간단한 해결방법은
- 서버에서 GET /health 에 대해 200반응을 응답하게 변경하고
- ELB 대상그룹에서 HealthCheck를 위해 /health 경로로 요청을 보내게 하면 끝!
조만간 처리해야겠다 :)
https://sarc.io/index.php/aws/1728-aws-3
'백엔드 > 이슈, 트러블슈팅' 카테고리의 다른 글
[AWS] EC2 프리티어 메모리 부족으로 발생한 빌드 실패와 해결과정 (0) | 2023.06.24 |
---|---|
보이어무어로 한글을 매칭하면 성능이 안좋다 ? (효율적으로 문자열 매칭하기) (0) | 2023.06.13 |
[Error] 근본적인 문제의 원인 파악하기 : Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause (0) | 2023.04.28 |
[SQL튜닝] 인덱스(Index)를 이용한 SQL 성능 개선 (1) | 2023.04.24 |
DTO에서 추상클래스를 사용하는것에 대하여 (4) | 2023.04.19 |