Amazon EMR 프라이머리 노드가 “502 잘못된 게이트웨이” 또는 “504 게이트웨이 시간 초과” 오류로 인해 실패했습니다.
간략한 설명
EMR 프라이머리 노드가 다음 오류 중 하나로 인해 실패할 수 있습니다.
The master failed: Error occurred:<html>?? <head><title>502 Bad Gateway</title></head> <body>?? <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx/1.20.0</center>?? </body>?? </html>??
또는
The master failed: Error occurred: <html>??<head><title>504 Gateway Time-out</title></head>??<body>??<center><h1>504 Gateway Time-out</h1></center>??<hr><center>nginx/1.16.1</center>??</body>??</html>??
이러한 오류의 일반적인 원인은 다음과 같습니다.
- 인스턴스 컨트롤러 데몬이 중지된 상태이거나 프라이머리 노드 인스턴스에서 다운되었습니다.
- 프라이머리 노드의 메모리 또는 디스크 공간이 부족합니다.
- Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 상태 검사가 실패했습니다.
해결 방법
프라이머리 노드 인스턴스 컨트롤러 데몬 장애 문제 해결
프라이머리 노드의 인스턴스 컨트롤러(I/C)는 EMR 컨트롤 플레인 및 나머지 클러스터와 통신하는 데몬입니다. 인스턴스 컨트롤러가 EMR 컨트롤 플레인과 통신할 수 없는 경우, 프라이머리 노드가 비정상으로 분류되고 클러스터가 종료됩니다.
이 문제를 해결하려면 인스턴스 컨트롤러 로그를 분석하여 프로세스가 실패한 이유를 확인하십시오. 인스턴스 컨트롤러 로그는 **/emr/instance-controller/log/**에 있습니다.
종료 보호가 켜져 있는 경우 SSH를 프라이머리 노드에 연결하고 인스턴스 컨트롤러 프로세스를 다시 시작합니다.
Amazon EMR 5.30.0 이상의 릴리스 버전:
1. 다음 명령을 사용하여 I/C 상태를 확인합니다.
sudo systemctl status instance-controller.service
2. 다운된 상태인 경우 다음 명령을 사용하여 I/C를 다시 시작합니다.
sudo systemctl start instance-controller.service
Amazon EMR 4.x~2.x 릴리스 버전:
1. 다음 명령을 사용하여 I/C 상태를 확인합니다.
sudo /etc/init.d/instance-controller status
2. 다운된 상태인 경우 다음 명령을 사용하여 I/C를 다시 시작합니다.
sudo /etc/init.d/instance-controller start
로그 파일을 분석하여 메모리 및 디스크 문제 해결
- 종료 방지가 켜져 있는 경우 SSH를 사용하여 프라이머리 노드에 연결합니다. 그런 다음 인스턴스 상태 로그 파일을 검토합니다.
- 인스턴트 상태 로그에 나열된 메모리 및 디스크와 같은 인스턴스 지표를 분석합니다. free -m 및 df -h와 같은 Linux 명령을 사용하여 이러한 지표를 분석할 수 있습니다.
- 로그 파일 결과를 사용하여 프라이머리 노드에서 많은 양의 디스크 또는 메모리를 사용하는 이유를 확인할 수 있습니다.
프라이머리 노드 EC2 인스턴스 상태 검사 실패 문제 해결
- 인스턴스 상태 확인 지표를 확인하여 프라이머리 인스턴스 상태 확인이 실패했는지 확인합니다.
- 인스턴스 상태 확인 실패 문제를 해결합니다. EC2 인스턴스를 시작하고 중지하면 EMR 클러스터가 종료된다는 점에 유의하십시오.
종료 방지 기능이 꺼져 있고 클러스터가 이미 종료된 프라이머리 노드의 문제를 해결합니다.