AWS - Auto Scaling Group Multiple Zone 機制


情境 使用 ASG 跨 2 Zones

假設有個 AS Policy

  • Lower bound 2
  • Upper Bound 10
  • Desired 6(Each zone 3 instances)

image

接下來會用兩個情境來帶入 機器掛掉後 ASG 的處理機制


情境一 在一個 Zone 失去一個 Instance

image


  1. 這時候掛掉的 Instance 會被標記成 Unhealthy 並且刪除
  2. ASG 啟動新的 Instace 在相同 Zone 維持 ASG 標準

image


情境二 失去一整個 Zone

image


  1. 掛掉的 Zone 與 Instance 會被標記成 Unhealthy
  2. ASG 並不會在原本的 Zone 重新開啟 Instance
  3. 而是在可用且定義在 ASG 的其他 Zone 把失去數量的 Instace 在可用 Zone 啟動

image


如何除錯? 發生異常的機制是什麼

EC2 ASG 提供使用者用 Lifecycle hooks 在 instance launch/terminate 的功能,這些 hook 可以讓你自訂一些行為在整個生命週期裡面,下面用一張圖來表示


image


你當然可以透過 CloudWatch 來監控 Scale-in/out 的事件來觀察系統的異常的頻率,但是有些系統更深入的偵測可以用這些 lifecycle hook 來搭配你的生產力工具得到更適合你的監測方案。


下列提供一些常見的案例

  • 安裝軟體 當 scale-out 事件發生,新啟動的 Instance 可以在 pending state 自動用 lambda 下載與安裝軟體直到完成後傳送轉換 EC2 成 InService 狀態

  • 收集 logs 當 Health Check 發現且關閉 Instance Health Check 可以用 hook 暫停 instance 到 terminating 狀態,在這個 hooks 可以設置自動連線到這個 terminating instance 進去把 logs 下載下來再轉變成 terminated 狀態

  • 指派 Elastic IP 當 Health Check 檢查到 Unhealthy 狀態且更換成新 Instance 可以把原本被刪除的 EIP 自動加載到新的 Istance

  • 掛載 Storage 當 Health Check 檢查到 Unhealthy 狀態且 instance EBS 是有被掛載的可以用 hooks 把原本的 EBS detach 後 attach 到新的

  • 註冊服務 當新 instance launch 轉變成 pending 狀態 hook 可以自動註冊到 DNS/Message Queue 或是其他服務中 直到完成註冊

  • 錯誤調查 當 Health Check 檢查到 Unhealthy 且 terminate hook 可以暫停 terminating 讓工程師手動進入 instance 檢查直到找到錯誤原因後改變狀態成 terminated