AWS - Auto Scaling Group Multiple Zone 機制
情境 使用 ASG 跨 2 Zones
假設有個 AS Policy
- Lower bound 2
- Upper Bound 10
- Desired 6(Each zone 3 instances)
接下來會用兩個情境來帶入 機器掛掉後 ASG 的處理機制
情境一 在一個 Zone 失去一個 Instance
- 這時候掛掉的 Instance 會被標記成 Unhealthy 並且刪除
- ASG 啟動新的 Instace 在相同 Zone 維持 ASG 標準
情境二 失去一整個 Zone
- 掛掉的 Zone 與 Instance 會被標記成 Unhealthy
- ASG 並不會在原本的 Zone 重新開啟 Instance
- 而是在可用且定義在 ASG 的其他 Zone 把失去數量的 Instace 在可用 Zone 啟動
如何除錯? 發生異常的機制是什麼
EC2 ASG 提供使用者用 Lifecycle hooks 在 instance launch/terminate 的功能,這些 hook 可以讓你自訂一些行為在整個生命週期裡面,下面用一張圖來表示
你當然可以透過 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