使用 Amazon EC2 競價型執行個體 - FSx為了光澤

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon EC2 競價型執行個體

FSx用於 Lustre 可與EC2競價型執行個體搭配使用,以大幅降低您的 Amazon EC2 成本。Spot 執行個體是未使用的EC2執行個體,可用的價格低於隨需價格。當競價型價格超過您的最高價、競價型執行個體需求上升或 Spot 執行個體供應減少時,Amazon EC2 可能會中斷您的競價型執行個體。

Amazon 中EC2斷 Spot 執行個體時,會提供競價型執行個體中斷通知,在 Amazon 中EC2斷執行個體前兩分鐘發出警告。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的 Spot 執行個體

為確保 Amazon FSx 檔案系統不會受到 EC2 Spot 執行個體中斷的影響,建議您在終止或休眠 Spot 執行個體之前卸載 Amazon FSx 檔案系統。EC2如需詳細資訊,請參閱卸載檔案系統

處理 Amazon EC2 競價型執行個體中斷

FSxto Lustre 是一個分散式檔案系統,伺服器和用戶端實例可以合作提供高效能且可靠的檔案系統。它們會在用戶端和伺服器執行個體之間維護分散式和一致的狀態。FSx用於 Lustre 伺服器會在用戶端主動執行 I/O 和快取檔案系統資料時,將臨時存取權限委派給用戶端。當服務器請求客戶撤銷其臨時訪問權限時,客戶端應在短時間內回复。為了保護檔案系統免於行為不當的用戶端,伺服器可以驅逐幾分鐘後沒有回應的 Lustre 用戶端。為了避免無回應的用戶端需要等待多分鐘才能回覆伺服器要求,請務必徹底卸載 Lustre 用戶端,尤其是在終止 Spot 執行個體之前。EC2

EC2Spot 會在關閉執行個體之前提前 2 分鐘傳送終止通知。我們建議您在終止 Spot 執行個體之前,自動執行乾淨卸載 Lustre 用戶端的程序。EC2

範例 — 用於乾淨卸載終止 EC2 Spot 執行個體的指令碼

此範例指令碼可透過執行下列動作,徹底卸載終止 EC2 Spot 執行個體:

  • 注意現貨終止通知。

  • 當它收到終止通知時:

    • 停止存取檔案系統的應用程式。

    • 在執行個體終止之前卸載檔案系統。

您可以根據需要調整腳本,特別是對於正常關閉應用程序。如需有關處理 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 unmounting '$FSXPATH'. Processes accessing it:" >&2 lsof "${FSXPATH}" echo "Retrying..." continue fi # Start a graceful shutdown of the host shutdown now done