Study Notes - EC2 Auto Scaling - Termination Policies


Auto Scaling 會自動增加機器,也會自動刪除機器,那 Auto Scaling 怎麼知道要砍哪一台?看最舊的?看最新的?還是看心情?

如同前面說描述,一個通用的機制的考慮必須是全面性的,所以接下整理的就是很多人會關心的問題:EC2 Auto Scaling 對 Instance 的 刪除策略 (Termination Policies)

EC2 Auto Scaling 系列文章


Termination Policies

當 ASG 達到條件,把調整機器數從多變少的時候 (稱為 Scale In 或 Remove Instance),這時候 ASG 需要選擇刪除哪一台 EC2,這些選擇策略稱為:Termination Policies,同樣的依照不同情境、架構也會有不同選擇。一共有三種:

  • Default Termination Policy
  • Customizing the Termination Policy
  • Instance Protection

Default Termination Policy

Default Termination Policy 挑選刪除 Instance 的條件次序:

  1. 據機器在 AZ 的數量 -> 選擇機器多的 AZ,然後挑一台砍掉
  2. 如果在 AZ 裡有多台 unprotected instances,先找機器多的 AZs
    a. 根據選擇 Instance Type 的策略,可能是 Spot or On-Demand
    b. 如果有多台機器,則找到其中 LC or LT 最舊的機器,然後砍掉
    c. 如果是使用 LC 跑起來的 ASG,找到最舊的 LC 砍掉。
  3. 那一台機器快到下個 Billing 的時間
  4. 如果有多台 unprotected instances 都快到下一個 billing hour,那就隨機挑一台坎。

Customizing the Termination Policy

除了 Default Termination Policy,使用者也可以使用 Customizing the Termination Policy,目前支援以下幾種:

  • OldestInstance: 刪除最舊的 Instance 。通常用在更換 AMI / LC 的時候,可以透過增加一倍的機器,等機器都好了,再恢復期望值,如此就的機器就會全部刪除了。有點像是 Blue-Green Deployment 時的狀況。
  • NewestInstance: 跟上一個相反,刪除最新的 Instance。通常用在測試新版本的 AMI / LC,可以想像適用 Canary Deployment 的方式。
  • OldestLaunchConfiguration: 刪除最舊的 LC 所建立的機器。
  • ClosestToNextInstanceHour: 刪除最接近下次收費的機器。
  • Default: 預設,就是前面的流程圖。

Termination Policy 可以有多個。

Instance Protection

Instance Protection 用來保護特定的 EC2 Instance,可以使用在新開機的 Instance 或者是已經在執行中的 Instance。在 Production 維運時,這是非常重要的功能,可以避免 Downtime。使用此功能要注意以下:

  • 如果把機器從 ASG Detach 後,重新 Attach 回 ASG,就會失去 Protection。
  • 如果手動到 EC2 Console 把機器砍了,是不被 ASG 可以控管的。要個別保護 EC2 ,則可以使用 Termination Protection。
  • Spot Instance Interruption 會直接砍了機器。

Termination 要注意的地方

通常要砍掉機器,要注意的是應用程式是否有 Graceful Shutdown

如果執行中的程序 (Process),直接被中斷,不影響邏輯或者狀態,那麼就無所謂。如果執行中的程序被中斷,會影響商業邏輯,那麼就要透過 Lifecycle 機制,通知應用程式執行完之後不要在繼續執行了,這個過程稱為 Graceful Shutdown。類似的例子是 ELB 的 Connection Draining (連線排水) 其實就是 Graceful Shutdown 在 Load Balancer 的實作。

ASG 上的 Graceful Shutdown 實作通常會搭配 Lifecycle Hooks 執行,詳細介紹參見:EC2 Auto Scaling Lifecycle and Hooks


延伸閱讀

系列文章

站內延伸


Comments