我的 Amazon EMR 主节点故障,出现“502 Bad Gateway”(502 无效网关)或“504 Gateway Time-out”(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 集群终止。
对已关闭终止保护且集群已终止的主节点进行故障排查