使用 Amazon EC2 Spot 实例 - FSx for Lustre
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon EC2 Spot 实例

FSx for Lustre 可以与 EC2 竞价型实例一起使用,以显著降低您的 Amazon EC2 成本。Spot 实例是一种未使用的 EC2 实例,以低于按需价格提供。在竞价型价格超过您的最高价、竞价型实例需求增加或竞价型实例供应减少时,Amazon EC2 可能会中断您的竞价型实例。

在 Amazon EC2 中断竞价型实例时,将提供竞价型实例中断通知,这会在 Amazon EC2 终止该实例之前为其提供两分钟的警告。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的竞价型实例

为确保 Amazon FSx 文件系统不受 EC2 竞价型实例中断的影响,我们建议在终止或休眠 EC2 竞价型实例之前卸载 Amazon FSx 文件系统。有关更多信息,请参阅 卸载文件系统

处理 Amazon EC2 Spot 实例中断

FSx for Lustre 是一种分布式文件系统,其中服务器和客户端实例通过合作提供高性能可靠的文件系统。它们在客户端和服务器实例之间保持分布式和一致的状态。在客户端主动执行 I/O 和缓存文件系统数据时,fSx for Lustre 服务器将临时访问权限委派给客户端。当服务器请求撤销临时访问权限时,客户端应在短时间内回复。为了保护文件系统免受客户端行为不当的影响,服务器可以驱逐几分钟后没有响应的 Lustre 客户端。为了避免不响应的客户端等待多分钟才能回复服务器请求,清楚地卸载 Lustre 客户端非常重要,尤其是在终止 EC2 竞价型实例之前。

EC2 Spot 在关闭实例之前 2 分钟发送终止通知。我们建议您在终止 EC2 竞价型实例之前自动执行干净卸载 Lustre 客户端的过程。

例 — 用于干净卸载终止的 EC2 竞价型实例的脚本

此示例脚本通过执行以下操作干净地卸载终止 EC2 竞价型实例:

  • 关注 Spot 终止通知。

  • 当它收到终止通知时:

    • 停止正在访问文件系统的应用程序。

    • 在实例终止之前卸载文件系统。

您可以根据需要调整脚本,尤其是为了优雅地关闭应用程序。有关处理竞价型实例中断的最佳实践的更多信息,请参阅处理 EC2 Spot 实例中断的最佳实践.

#!/bin/bash # TODO: Specify below the FSx mount point you are using *FSXPATH=/fsx* cd / TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") if [ "$?" -ne 0 ]; then echo "Error running 'curl' command" >&2 exit 1 fi # Periodically check for termination while sleep 5 do HTTP_CODE=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s -w %{http_code} -o /dev/null http://169.254.169.254/latest/meta-data/spot/instance-action) if [[ "$HTTP_CODE" -eq 401 ]] ; then # Refreshing Authentication Token TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") continue elif [[ "$HTTP_CODE" -ne 200 ]] ; then # If the return code is not 200, the instance is not going to be interrupted continue fi echo "Instance is getting terminated. Clean and unmount '$FSXPATH' ..." curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/spot/instance-action echo # Gracefully stop applications accessing the filesystem # # TODO*: Replace with the proper command to stop your application if possible* # Kill every process still accessing Lustre filesystem echo "Kill every process still accessing Lustre filesystem..." fuser -kMm -TERM "${FSXPATH}"; sleep 2 fuser -kMm -KILL "${FSXPATH}"; sleep 2 # Unmount FSx For Lustre filesystem if ! umount -c "${FSXPATH}"; then echo "Error unmouting '$FSXPATH'. Processes accessing it:" >&2 lsof "${FSXPATH}" echo "Retrying..." continue fi # Start a graceful shutdown of the host shutdown now done