Network Load Balancer Unhealthy
아마존 공식 홈페이지에 잘 나와 있다.
https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html
하지만 번역 투는 쉽게 읽히지 않는다.
Healthy Check
-
로드 밸런서가 인스턴스의 상태를 확인하는 것
-
정상적인 대상에만 요청을 보냄
Unhealthy Check
- 인스턴스의 상태를 정상적으로 확인하지 못함
- 인스턴스의 상태가 정상적이지 않음
원인
1. 등록 된 대상이 서비스 중이 아닙니다
-
보안 그룹이 로드 밸런서의 접근을 막고 있는 경우
🌞 로드 밸런서로 접근하는 Port를 보안 그룹에서 Open
-
네트워크 액세스 제어 목록 (ACL)이 트래픽을 허용하지 않는 경우
ACL: 인터페이스로 들어오고 나가는 패킷을 분석해 정해진 규칙에 따라 패킷을 전송/차단하여 네트워크의 접속을 제어함 라우터의 방화벽
🌞 인스턴스의 서브넷/로드밸런서의 서브넷과 연결된 ACL이 로드 밸런서의 트래픽 및 상태 확인을 허용해야 함
2. 요청이 대상으로 라우팅되지 않았습니다.
-
보안 그룹 확인 –> 1번 참고
🌞 인스턴스 보안그룹, 로드 밸런서 노드의 리스너 포트 ▶ 트래픽 허용
-
ACL 트래픽 허용 –> 1번 참고
🌞 VPC 서브넷과 연결된 ACL은 로드 밸런서 및 리스너 포트에서 양방향 통신 허용
-
활성화 되지 않은 가용 영역에 있을 때
⚠ 로드 밸런서 트래픽 수신 :x:
-
인스턴스가 로드 밸런서 VPC와 피어링 된 VPC에 있을 때
⚠ IP 주소로 로드 밸런서에 인스턴스 등록(인스턴스 ID :x:)
🌞 같은 VPC에 있으면 인스턴스 ID :o:
3. 대상이 예상보다 더 많은 상태 확인 요청을 받습니다.
- HealthCheckIntervalSeconds 설정을 통해 구성된 상태 확인 수보다 더 많이 수신하는 지 확인]
4. 대상이 예상보다 적은 상태 확인 요청을 받습니다.
-
net.ipv4.tcp_tw_recycle 가 활성화 되어 있으면 문제 발생
▶ net.ipv4.tcp_tw_reuse 설정
5. 비정상 대상은 로드 밸런서에서 요청을 받습니다.
- 비정상 등록된 대상만 있으면 로드 밸런서는 모든 대상으로 요청을 라우팅
- 정상/비정상 등록 대상이 있으면 정상으로만 라우팅 요청
6. 호스트 헤더 불일치로 인해 대상이 HTTP 또는 HTTPS 상태 확인에 실패
- 상태 확인 요청 HTTP 호스트 헤더에 로드 밸런서 노드의 IP 주소와 리스너 포트 포함
- 수신 호스트 헤더 별로 매핑 -> 모든 HTTP 호스트 헤더와 일치하는 지 확인
7. 대상에서 로드 밸런서로의 요청에 대한 연결 시간 초과
- 인스턴스 ID 대상의 내부 부하 분산기 확인
- 인스턴스 ID 대신 IP 주소로 인스턴스 등록
8. 대상을 NLB로 이동할 때 성능 저하
-
연결 멀티 플렉싱 사용:x:
CLB와 ALB는 사용
▶ TCP 연결을 더 많이 수신 :o:
9. AWS PrviateLink를 통해 연결하는 포트 할당 오류
- 55,000 개의 동시 연결 초과 시 포트 할당 오류 발생
발생한 문제
- 80 port를 통해 정상적으로 로드밸런싱을 했지만 unhealthy가 발생
- 연결된 EC2에서 아파치를 아직 배포하지 않았기 때문
▶▶ EC2와 로드밸런서의 상태를 잘 확인하자