使用容量重新平衡來處理 Amazon EC2 Spot 中斷 - Amazon EC2 Auto Scaling

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

使用容量重新平衡來處理 Amazon EC2 Spot 中斷

您可以設定 Amazon EC2 Auto Scaling 來監控並自動回應影響 Spot 執行個體可用性的變更。容量重新平衡可協助您維持工作負載可用性,方法是在執行中的執行個體受到 Amazon EC2 的中斷之前,使用新的 Spot 執行個體主動擴增機群。

容量重新平衡的目標是持續處理您的工作負載而不會中斷。當 Spot 執行個體的中斷風險提高時,Amazon EC2 Spot 服務會通知 Amazon EC2 Auto Scaling 並提供 EC2 執行個體重新平衡建議。

為 Auto Scaling 群組啟用容量重新平衡時,Amazon EC2 Auto Scaling 會嘗試主動取代您的群組中已收到重新平衡建議的 Spot 執行個體。這樣一來,您即可有機會將工作負載重新平衡至未處於提高之中斷風險的新的 Spot 執行個體。您的工作負載可以繼續處理工作,同時 Amazon EC2 Auto Scaling 在現有執行個體中斷之前啟動新的 Spot 執行個體。

不使用容量重新平衡時,直到 Amazon EC2 Spot 服務中斷執行個體且其運作狀態檢查失敗後,Amazon EC2 Auto Scaling 才會取代 Spot 執行個體。在中斷執行個體之前,Amazon EC2 必定會提供 EC2 執行個體重新平衡建議和 Spot 執行個體兩分鐘中斷通知。

概要

若要將容量重新平衡與 Auto Scaling 群組搭配使用,基本步驟如下:

  1. 設定您的 Auto Scaling 群組,以使用多個執行個體類型和可用區域。這樣一來,Amazon EC2 Auto Scaling 就可以查看每個可用區域中 Spot 執行個體的可用容量。如需詳細資訊,請參閱 具有多種執行個體類型和購買選項的 Auto Scaling 群組

  2. 視需要新增生命週期關聯,以便在接收重新平衡通知的執行個體內對應用程式執行正常關閉程序。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling lifecycle hook

    以下是您可能使用 lifecycle hook 的一些原因:

    • 實現 Amazon SQS 工作者的順利關機

    • 完成從網域名稱系統 (DNS) 取消註冊

    • 提取系統或應用程式日誌並上傳到 Amazon Simple Storage Service (Amazon S3)

  3. 開發 lifecycle hook 的自訂動作。若要盡快調用您的自訂動作,您需要知道執行個體何時可以終止。可以透過偵測執行個體的生命週期狀態來找出答案。

    • 若要在執行個體之外叫用動作,請撰寫 EventBridge 規則,並自動化事件模式與規則相符時要採取的動作。

    • 若要在執行個體內調用動作,請將執行個體設定為執行關閉指令碼,並透過執行個體中繼資料擷取生命週期狀態。

    設計自訂動作在兩分鐘內完成操作至關重要。這樣可以確保在執行個體終止前有充裕的時間完成任務。

完成這些步驟後,您便可以開始使用容量重新平衡。

容量重新平衡行為

透過容量重新平衡,當執行個體接收重新平衡建議時,Amazon EC2 Auto Scaling 的行為如下:

  • 新 Spot 執行個體啟動時,Amazon EC2 Auto Scaling 會先等待新執行個體通過運作狀態檢查,然後才會終止先前的執行個體。在取代多個執行個體時,每個先前的執行個體都會在新執行個體啟動並通過其運作狀態檢查之後開始終止。

  • 由於 Amazon EC2 Auto Scaling 會在終止先前的執行個體前嘗試啟動新執行個體,達到或接近最大指定容量便會阻礙或完全停止重新平衡的活動。若要避免這個問題,Amazon EC2 Auto Scaling 可以暫時超過該群組的大小上限最高可達所需容量的 10%。

  • 如果您沒有將 lifecycle hook 新增到 Auto Scaling 群組,Amazon EC2 Auto Scaling 便會在新執行個體通過運作狀態檢查後立即終止先前的執行個體。

  • 如果您新增了 lifecycle hook,便可藉由您為 lifecycle hook 指定的逾時值,來延長我們開始終止先前執行個體之前所需的時間。

  • 如果您使用擴展政策或排程擴展,則擴展活動會並行執行。如果正在執行擴展活動,且 Auto Scaling 群組低於其所需的新容量,Amazon EC2 Auto Scaling 會在終止先前的執行個體之前進行擴增。

如果在一個可用區域中沒有執行個體類型的容量,Amazon EC2 Auto Scaling 會繼續嘗試在其他啟用的可用區域中啟動 Spot 執行個體,直到啟動成功為止。

在最壞的情況下,如果新執行個體無法啟動或其運作狀態檢查失敗,Amazon EC2 Auto Scaling 會繼續嘗試重新啟動這些執行個體。在其嘗試啟動新的執行個體時,會在發出兩分鐘的中斷通知後,最終中斷並強制終止先前的執行個體。

考量事項

使用容量重新平衡時,請考慮下列事項:

應用程式的設計應容許 Spot 中斷

您的應用程式應該能夠處理執行個體數量的動態變更以及 Spot 執行個體提前中斷的可能性。例如,如果 Auto Scaling 群組位於 Elastic Load Balancing 負載平衡器後方,Amazon EC2 Auto Scaling 會等待執行個體從負載平衡器取消註冊,然後再呼叫 lifecycle hook。如果取消註冊執行個體和完成生命週期動作的時間過長,在 Amazon EC2 Auto Scaling 等待您的生命週期動作完成後再終止執行個體期間,執行個體可能會中斷。

Amazon EC2 並不總是能在兩分鐘 Spot 執行個體中斷通知之前傳送重新平衡建議訊號。有時候,重新平衡建議訊號會與兩分鐘的中斷通知一起到達。發生這種情況時,Amazon EC2 Auto Scaling 會呼叫 Lifecycle hook,並嘗試立即啟動新 Spot 執行個體。

避免中斷替代 Spot 執行個體的風險提高

如果您使用 lowest-price 配置策略,替代 Spot 執行個體的中斷風險可能會提高。這是因為我們會在當時具有可用容量的最低價集區中啟動執行個體,即使您的替代 Spot 執行個體在啟動後很快就會中斷也一樣。為了避免提高中斷風險,我們強烈建議您不要使用 lowest-price 配置策略。相反,我們建議使用 price-capacity-optimized 配置策略。此策略會在 Spot 集區中啟動最不可能中斷且價格可能最低的 Spot 執行個體。因此,它們在不久後的將來不太可能會中斷。

只有在可用性相同或更好時,Amazon EC2 Auto Scaling 才會啟動新執行個體

容量重新平衡的其中一個目標是改善 Spot 執行個體的可用性。如果現有的 Spot 執行個體收到重新平衡建議,只有新執行個體提供與現有執行個體相同或更好的可用性時,Amazon EC2 Auto Scaling 才會啟動新執行個體。如果新執行個體的中斷風險比現有執行個體更大,則 Amazon EC2 Auto Scaling 將不會啟動新執行個體。但是,Amazon EC2 Auto Scaling 將基於 Amazon EC2 Spot 服務提供的資訊,繼續評估 Spot 容量集區,並在可用性改善時啟動新執行個體。

如果 Amazon EC2 Auto Scaling 不主動啟動新執行個體,現有執行個體可能會中斷。發生這種情況時,Amazon EC2 Auto Scaling 會在收到 Spot 執行個體中斷通知後立即嘗試啟動新執行個體。無論新執行個體是否存在高中斷風險,都會進行此嘗試。

容量重新平衡不會增加 Spot 執行個體中斷率

當您啟用容量重新平衡時,不會增加 Spot 執行個體中斷率 (當 Amazon EC2 需要恢復容量時回收的 Spot 執行個體數量)。但是,如果容量重新平衡偵測到執行個體有中斷風險,Amazon EC2 Auto Scaling 將立即嘗試啟動新的執行個體。因此,與在有風險的執行個體中斷後等待 Amazon EC2 Auto Scaling 啟動新的執行個體相比,可能會取代更多執行個體。

雖然您可以在啟用容量重新平衡的情況下取代更多執行個體,但您可以從主動式而非被動式中受益。這可讓您有更多時間在執行個體中斷之前採取行動。透過 Spot 執行個體中斷通知,您通常最多只有兩分鐘時間來正常關閉您的執行個體。透過容量重新平衡事先啟動新的執行個體,可讓現有程序更有可能在有風險的執行個體上完成作業。您也可以啟動執行個體關閉程序,防止在有風險的執行個體上排定新的作業,並為新啟動的執行個體作好準備以接管該應用程式。透過容量重新平衡的主動式取代,您可以從正常連續性中獲益。

下列理論範例示範了使用容量重新平衡的風險和益處:

  • 下午 2:00 – 收到執行個體 A 的重新平衡建議,Amazon EC2 Auto Scaling 立即嘗試啟動取代執行個體 B,讓您有時間開始關機程序。

  • 下午 2:30 – 收到執行個體 B 的重新平衡建議,會取代為執行個體 C,讓您有時間開始關機程序。

  • 下午 2:32 – 如果未啟用容量重新平衡,並且如果在下午 2:32 仍未收到執行個體 A 的 Spot 執行個體中斷通知,則您最多只有兩分鐘時間採取動作。不過,執行個體 A 會一直持續執行,直到此時為止。