Skip to main content

AutoScaling

AWS Auto Scaling

  • 管理跨多個服務的scaling,可以包含多個EC2 Auto Scaling Group
  • Scaling Process * 是可以suspend掉的
    • Launch: 啟動EC2
    • Terminate: 停止EC2
    • HealthCheck: 檢查EC2的健康狀態
    • ReplaceUnhealthy: 取代掉不健康的EC2
    • AZRebalance: 平均不同AZ中的AutoScalingGroup的機器數量,以提高Availability。但可能會all healthy時候做出Terminate的動作
    • AlarmNotification: 從CloudWatch拿到Alarm事件
    • ScheduledActions: By Schedule的scaling rule
    • AddToLoadBalancer: 機器起來後,確定healthy後,將其加入LoadBalancer後開始進行服務
  • Health Check的種類
    • EC2 Status Checks
    • ELB Health Checks (HTTP)

AWS EC2 Auto Scaling

  • 可以跨AZ,但不能跨Region 使用情境
    • 預先定義的scale strategy
    • 預測scaling (需要與AWS Auto Scaling一起定義)
    • 提高Availability
      • EC2 叢集達到高平均使用率時,以遞增方式將新的 Amazon EC2 執行個體新增到 ASG
      • 設定一個條件,在 CPU 使用率低時,以相同的量遞減移除執行個體
      • 用 Amazon CloudWatch 傳送警示以觸發擴展活動,並使用 Elastic Load Balancing (ELB) 將流量分配給 ASG 內的執行個體
      • 若負載變化是可預測的,則可透過 Amazon EC2 Auto Scaling 設定排程,以規劃您的擴展活動
  • Launch Configuration (啟動組態)
    • ASG啟動EC2 Instance時的template
    • 可以包含
      • AMI ID
      • Key Pair
      • Security Group
      • Block Device Mapping
  • 不會啟動超過quota允許數量的EC2
    • ASG設定超過quota時,會以quota上限為準
  • Auto Scaling balance: Best Practice是將Auto Scaling balance跨AZ
  • 縮減規模時
    • 需要定義Terminate Policy以決定要自動停掉的是哪些Instance
    • 可以對特定Instance啟動terminate protect,可以避免Auto Scaling停掉該Instance
    • 若要被Terminate的instance有資料要保存
      • 務必存在外部服務如S3, RDS, DynamoDB
      • Terminate掉的資料是救不回來的
    • 若要被Terminate的instance上有正在服務的user
      • EC2 Auto Scaling Group並不支援terminate wait
      • 要實現需要透過Route53,Reserve Proxy或Microservice解決

Amazon EC2 Auto Scaling Group (ASG)

  • 包含一組特性相似的EC2 instance的邏輯群組
  • 刪除ASG會同時停掉該ASG中尚在執行的EC2 instance
  • 一個ASG只能有一個Launch Configuration,而且建立後不能修改
  • ASG內可以加入quota允許數量的EC2
  • 在ASG建立後被啟動的Instance,不會自動將之前instance的資料複製到新的instance
  • 在既有的EC2上create ASG時,不會自動建立AMI
  • 可以將ASG內的Instance可以設定EC2 Type
    • Spot Instance Only: Scale不一定會成功,但能省成本
    • Reserved Instance
    • On-Daemon Instance

Lifecycle Hooks

  • EC2 Auto Scaling的instance啟動或停止時採取行動
  • 有兩種:Launch Hook和Terminate Hook
    • Launch Hook可以用來在base AMI上安裝所需的軟體環境
    • Terminate可以在結束instance前收集資料

Health Check

  • EC2 Auto Scaling有自己的health checks機制
  • 如果有掛ELB,也可以支援ELB health checks
    • 但ELB對EC2 Auto Scaling不是必要的
    • 只是有ELB存在的話,使用ELB health check較正確
  • 也支援ALB (Application Load Balancer)或NLB (Network Load Balancer)的health check
  • EC2 Auto Scaling自帶的Health Check是可以手動觸發的的
    • 透過API call: SetInstanceHealth,例如change instance state to UNHEALTHY
    • 不是指ELB, ALB, NLB的Health Check
  • 可以suspend暫停health check
    • 透過API call: SuspendProcesses和ResumeProcess API