如何排查挂载我的 EFS 文件系统时出现的“nfs: server 127.0.0.1 not responding”(nfs:服务器 127.0.0.1 未响应)错误?

2 分钟阅读
0

我的 Amazon Elastic File System (Amazon EFS) 服务器未响应并显示错误消息“nfs: server 127.0.0.1 not responding”(nfs:服务器 127.0.0.1 未响应)。我应该如何排查此问题?

简短描述

以下是您可能看到 server not responding(服务器未响应)错误的常见原因:

  • NFS 客户端无法连接到 EFS 服务器。
  • 发生了实例重启或关闭。或者,源自 EC2 实例的任何其他连接断开。出现的这些情况会导致 NFS 客户端与 EFS 服务器之间的连接断开。此行为与 TCP RFC 不一致。连接断开可能会导致从 Amazon EFS 至 Amazon Elastic Compute Cloud (Amazon EC2) 实例或 NFS 客户端的响应被阻止多分钟。
  • 使用 NFS 客户端挂载文件系统时,未使用 noresvport 挂载选项。
  • 可能是内核版本错误导致 EFS 挂载失败。例如,RHEL6 中存在许多已知 NFS 客户端问题,这些问题导致出现类似于文件系统未响应的症状。在 RHEL6.X 的较早内核版本中,文件系统可能不可用且无法重新挂载。如果您运行的是以下版本,则 Amazon EFS 中可能会发生 NFS 连接挂起:
  • RHEL 或 CentOS 7.6 或更高版本(内核版本为 3.10.0-957)。
  • 采用内核版本 4.16 至 4.19 的任何其他 Linux 发行版。

解决方法

1.    挂载文件系统时,使用 noresvport 挂载选项。此选项可确保 NFS 客户端在必须重建网络连接时使用新的 TCP 源端口。使用 noresvport 可确保 EFS 文件系统在网络恢复事件之后保持不间断可用性。

$   sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-ip:/ mnt

如果您使用的是 EFS 挂载帮助程序,则默认会出现 noresvport 选项。如果您使用 NFS 进行挂载,则必须显式添加此参数。有关更多信息,请参阅建议的 NFS 挂载选项

2.    检查内核版本。特定的内核版本(例如 RHEL 或 CentOS 7.6 或更高版本(内核版本为 3.10.0-957))可能存在问题,这可能会导致文件系统挂载失败。如果您运行的是这些内核版本之一,请重新启动以恢复对文件系统的访问。要确认内核版本是问题所在,请在无法运行 Is 时验证 ps 命令的输出:

$ ps auxwwwm | grep <mount_point_IP>

如果内核版本有问题,则升级内核。最佳实践是使用当前代的 Linux NFS4v.1 客户端或更高版本,以获得更好性能。

3.    通过运行以下命令验证客户端是否可以连接到服务器:

telnet <ip-of-efs> 2049

查看 /var/log/messages 下面的 NFS 客户端日志(EC2 实例操作系统日志)中是否存在错误。日志可能位于 /var/log/syslog/var/log/dmesg 目录下,具体取决于您的操作系统。

另外,如果您使用 EFS 挂载帮助程序挂载文件系统,则请查看 /var/log/amazon/efs 目录下的 EFS util 日志。EFS 挂载帮助程序具有内置的日志记录机制。

4.    确认您可以连接到 EC2 实例。

5.    验证 EC2 是否由于资源过度使用而过载。您可以通过监控 Amazon CloudWatch 中的 EC2 指标(例如 CPU 利用率和与网络相关的指标)来实现此目的。资源可能包括 CPU、内存、应用程序级问题等。

  • **内存过度使用:**当 RAM 过度使用时,可能会发生这种情况。过度使用意味着该实例将会耗尽内存空间,例如,应用程序开始占用更多 RAM 时。过度使用会导致内存不足 (OOM) 错误。启动后,这些错误会终止 OOM 分数较高或占用更多内存的进程。理想情况下,出现 OOM 错误时,实例无法访问。
    要临时解决 OOM 错误,请重新启动系统以释放内存空间。
    如需长期解决方案,请使用诸如“atop”和“top”之类的工具监控系统资源使用情况。然后,迁移到其他更适合您的工作负载的实例类型。有关更多信息,请参阅为什么我的 EC2 Linux 实例因为资源过度使用而变得无响应?
  • **网络性能:**查看实例的网络性能。有时候,即便 CloudWatch 指标显示网络使用率低,也可能出现微突增。微突增会在几秒内从工作负载发送大量流量。微突增通常持续不到一分钟。这种突增在 CloudWatch 图形和 Amazon Elastic Block Store (Amazon EBS) 统计数据中被掩盖,因为这些工具内使用的最小间隔为一分钟。使用诸如 sar、nload、iftop 之类的工具监控微突增行为。有关更多信息,请参阅当平均利用率较低时,为什么我的 Amazon Elastic Compute Cloud(Amazon EC2)实例超出了其网络限制?

6.    查看 EFS CloudWatch 指标并验证是否发生了 EFS 级限制。这意味着 EFS 的性能超出了其容量。如果您使用的是突增吞吐量模式,则请查看 BurstBalance CloudWatch 指标,以确定是否已耗尽突增余额。此外,请查看允许的吞吐量 CloudWatch 指标,以确定您使用的吞吐量是否高于预置的吞吐量。有关突增积分的更多信息,请参阅 Amazon EFS 突增积分如何运作?

如果您的应用程序需要近乎连续的吞吐量,请使用预置吞吐量模式。在从突增吞吐量切换到预置吞吐量模式之前,请考虑要预置多少吞吐量。要确定所需的最低预置吞吐量,请查看前两周文件系统的平均吞吐量使用情况。请注意最高峰值,四舍五入到下一个兆字节。有关更多信息,请参阅 EFS 中有哪些吞吐量模式可用?适合我的工作负载的吞吐量模式是什么?


相关信息

排查挂载问题

Amazon EFS 故障排除

AWS 官方
AWS 官方已更新 2 年前