[ ELB 운영시 만날 수 있는 이슈 ]
- HTTP 502 Bad Gateway : 백엔드 인스턴스로부터 온 응답을 ELB가 못 받는 경우
- HTTP 503 Service Unavailable : 인스턴스 등록이 되어있지 않은 경우 / 모든 인스턴스가 Unhealthy 상태인 경우
- HTTP 504 Gateway Timeout : 인스턴스 CPU 점유율이 높거나 / 프로그램이 데이터베이스나 외부 API Dependency로 인해 응답을 못 받는 경우
- Instance Out of Service : 인스턴스가 등록이 되지 않거나 / Unhealthy 상태인 경우
- Health Check Failure : ELB 생성시 대상그룹을 통해 인스턴스에 200코드 값을 요청하는데, 이외의 코드를 반환할 경우 Health check fail 발생
[ 에러 화면 ]
ELB 연결 작업시 503코드를 리턴 받아 그 원인을 짚어봄
1. EC2 문제인지 ELB문제인지 확인
프로그램은 php로 작성했기에 EC2 퍼블릭 아이피에 테스트 코드(info.php())를 찍어
아래와 같은 화면이 나오는지 확인
2. ELB생성시 대상등록 체크
위에서 언급했듯이 HTTP 503 Service Unavailable의 에러원인은 인스턴스 등록이 되어있지 않은 경우가 있다.
로드밸런싱 -> 대상그룹 -> 해당대상그룹클릭 -> Targets
에서 등록된 EC2를 확인 할 수 있다.
ELB 생성시 5단계 : 대상등록에서 해당 EC2를 체크하고 "등록된 항목에 추가" 버튼을 눌러 위의 등록된 대상 항목이 바뀌는 것을 보고 단계를 넘어가야한다.
3. 대상그룹의 Status 확인 (Health Check)
대상그룹의 Status가 Unheathly가 된 경우에도 503에러를 띄울 수 있다. 즉 health check가 않았다. ELB를 연결한 해당 프로그램을 API용도로만 만들어서 http://example.com 도메인으로 접속시 어떤 페이지도 나타내지 않는다.
따라서 도메인의 루트디렉토리(ex. /var/www/html )에 간단히 작성한 index.html를 넣어주면 200코드를 리턴하므로 수정 후 다시 테스트.
주의할 점이 ELB생성시 4단계 : 라우팅구성의 상태검사 경로를 다른 곳으로 지정했다면 200코드를 반환하는 파일을 지정한 곳에 위치시켜야한다.
[ 테스트 ]
대상그룹 Targets Health status가 healthy가 되어있는지 확인후
포스트맨으로 아래에 해당하는 URL에 접속해 기능테스트를 한다.
- EC2 Public IP
- ELB DNS 이름(A레코드)
참조 :
https://www.slideshare.net/awskorea/3-operating-issue-solution-for-aws-customers
댓글 없음:
댓글 쓰기