使用 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 实例,以低于按需价格提供。在竞价型价格超过您的最高价时、竞价型实例需求增加或 Spot 实例供应减少时,Amazon EC2 可能会中断您的竞价型实例。

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

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

处理 Amazon EC2 Spot 实例中断

FSx for Lustre 是一个分布式文件系统,服务器和客户端实例协同提供高性能和可靠的文件系统。它们在客户端和服务器实例之间保持分布式和一致的状态。FSx for Lustre 服务器在客户端主动执行 I/O 和缓存文件系统数据时向其委派临时访问权限。当服务器请求撤消其临时访问权限时,客户端应在短时间内做出回复。为了保护文件系统免受行为不当的客户机的侵害,服务器可以驱逐几分钟后没有响应的 Lustre 客户端。为避免必须等待多分钟才能让无响应的客户端回复服务器请求,必须彻底卸载 Lustre 客户端,尤其是在终止 EC2 Spot 实例之前。

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

例 — 用于彻底卸载终止的 EC2 Spot 实例的脚本

此示例脚本通过执行以下操作彻底卸载终止的 EC2 Spot 实例:

  • 注意 Spot 终止通知。

  • 当它收到终止通知时:

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

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

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

#!/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