iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

AWS架構應用系列 第 24

使用 Container 進行 Auto Scaling Group (3) - Day24

  • 分享至 

  • xImage
  •  

使用 Container 進行 Auto Scaling Group (3) - Day24

透過 ECS Cluster 可以順利建立一個叢集,裡面有兩台 EC2 實例,並執行 4 個 Containers的任務,接下來要執行的就是自動擴縮管理,請特別注意,自動擴縮管理的對象可以是任務(對應到的就是 container ),也可以是主機 (對應到的是 EC2 實例),先前介紹的都是以 EC2 實例為主,而 ECS 這邊介紹的則是會探討如何以 task 為管理對象。複習一下 AWS 自動擴縮架構,主要是由三個主要服務所組成,然而最主要的驅動服務是 CloudWatch 警示 (Alarm),先建立 CloudWatch 警示,而 CloudWatch 所監督目標就是 ELB (Elastic Load Balancing),再來設定擴縮政策,然而擴縮政策分成目標追蹤 (target tracking)、步進 (Step) 與簡單 (Simple) 三種不同類型,最能夠彈性設定的擴縮政策是步進擴縮政策,可以依照不同的指標來進行調整,最後在新增實例的時候會依照啟動組態 (Launch Configuration)的設定,放在目標群 (Target Group)中。

AWS 自動擴展或縮減架構
圖 1、AWS 自動擴展或縮減架構

我們希望擴縮政策為:

  • 每個任務的連線請求數(RequestCountPerTarget) > 100 時增加 1 個新任務
  • 100 > 連線請求數 > 200 時增加 3 個新任務
  • 連線請求數 < 50 時減少 50% 個任務
  • 連線請求數 < 20 時減少 90% 個任務

設定 CloudWatch 警示

在 CloudWatch 主控台,按下右方功能選單警示,按下建立警示後,我們建立兩個警示一個是新增實例 (Scale out),閾值是 RequestCountPerTarget > 100,一個是減少實例 (Scale In),閾值是 RequestCountPerTarget < 50。建立指標有四個步驟,分別如下:

步驟 1. 指定指標和條件

指標值設定為 Singapore > 全部 > ApplicationELB > 每個 AppELB、每個 TG 指標 > RequestCountPerTarget ,要注意要確定看到上面的圖型有資料才能確定已經正確找到指標值,因為有時候會有很多個 AppELB 實體,所以需要去找一下 ALB ARN 確認一下

設定 RequestCountPerTarget 指標值
圖 2、設定 RequestCountPerTarget 指標值

因為需要知道 1 分鐘內有多少個請求,所以需要把_統計資料_從平均數改成總和,期間 5 分鐘改成 1 分鐘。

設定 RequestCountPerTarget 圖形化指標
圖 3、設定 RequestCountPerTarget 圖形化指標

CloudWatch Alarm 指定指標
圖 4、CloudWatch Alarm 指定指標

條件
閾值類型 : 靜態
每當 RequestCountPerTarget 為 : 大於 > 閾值
定義閾值 : 100
要發出警示的資料點 : 1 出於 1 # 這個意思是第一個 1 是得到的資料數,第二個 1 是採樣資料的次數,舉例來說,如果設定 1 出於 2,表示採樣 2 次,只要有一次的 RequestCountPerTarget > 100,就會發出警示

CloudWatch Alarm 指定條件
圖 5、CloudWatch Alarm 指定條件

步驟 2. 設定動作
記得移除預設的通知動作,不移除的話也可以,要指定 email 以及到 指定的 email 去訂閱 SNS (Simple Notification Service) 主題。

移除 CloudWatch Alarm 預設通知動作
圖 6、移除 CloudWatch Alarm 預設通知動作

步驟 3. 新增名稱和描述

警示名稱: ithomeRequestPerTargetOutAlarmforECS
警示描述 - 選用: ithome Step ScalingOut policy Alarm for ECS tasks

步驟 4. 預覽並建立
再次確認資料是否正確

相同方法在建立另一個警示

閾值是每當 RequestCountPerTarget < 50
警示名稱: ithomeRequestPerTargetInAlarmforECS
警示描述 - 選用: ithome Step ScalingIn policy Alarm for ECS tasks

在 ECS 建立 Auto Scaling Group 擴展政策

按下上方的服務按鈕,選擇 ECS ,進入 Amazon ECS 主控台後,按下右方功能選單Clusters,按下剛剛建立的ithomeCluster,在下方頁簽的Services中選剛剛建立的ithomeService,進入服務後點選Update

進入修改叢集服務的 Auto Scaling
圖 7、進入修改叢集服務的 Auto Scaling

修改叢集的服務需要四個步驟,但因為我們只需要修改自動擴縮政策,所以只要針對步驟 3 來進行修改即可

步驟 3. Set Auto Scaling (optional)
將 Service Auto Scaling 選項改為 Configure Service Auto Scaling to adjust your service’s desired count

Service Auto Scaling: Configure Service Auto Scaling to adjust your service’s desired count
Minimum number of tasks: 2 # 最少任務的數量,指的是當都沒有任何任務時,最少維持的任務數量。
Desired number of tasks: 4 # 需要任務的數量,指的是當一啟動自動擴縮政策時,初始啟動的任務數量。
Maximum number of tasks: 30 # 最多的任務數量,當系統壓力增加時,隨著自動擴展政策增加任務,最多可以增加的任務數量
IAM role for Service Auto Scaling: ecsAutoScaleRole

設定叢集服務的Auto Scaling的基本設定
圖 8、設定叢集服務的 Auto Scaling 的基本設定

按下 Add scaling policy 來新增我們需要的擴縮政策

擴展策略
Scaling policy type: Step scaling
Policy name: ithomeRequestStepOutPolicy
Execute policy when: Use an existing Alarm
ithomeRequestPerTargetOutAlarmforECS
Scaling action:
Add 1 tasks when 100 < RequestCountPerTarget < 200
Add 3 tasks when 200 <= RequestCountPerTarget < +infinity
Cooldown period: 120 seconds between scaling actions

叢集服務的步進擴展策略
圖 9、叢集服務的步進擴展策略

縮減策略
Scaling policy type: Step scaling
Policy name: ithomeRequestStepInPolicy
Execute policy when: Use an existing Alarm
ithomeRequestPerTargetInAlarmforECS
Scaling action:
Remove 50 percent when 50 > RequestCountPerTarget < 20
Remove 90 percent when 20 >= RequestCountPerTarget > -infinity
Remove tasks in increments of at least 1 task(s)
Cooldown period: 120 seconds between scaling actions

叢集服務的步進縮減策略
圖 10、叢集服務的步進縮減策略

更新具有Auto Scaling 的叢集服務
圖 11、更新具有Auto Scaling 的叢集服務

觀察 ECS 步進擴展政策的運作

透過 Jmeter 設定對 ALB 發出 1000/每分的請求,詳細設定可參閱如何產生流量與監控流量 - Day17

Jmeter設定
圖 12、Jmeter設定

進入 CloudWatch 主控台,觀察 CloudWatch > 警示 > ithomeRequestPerTargetOutAlarmforECS,因為一開始只有 2 個任務,當送 1000 個左右個請求,每個 task 會收到約 500 請求。所以會觸發警示(警示 > 100),但是因為它是 500 左右的請求數量,所以會進入第二個步進政策 (警示 > 200),啟動 3 個任務;這時候就有 5 個任務,這樣平均就會到約 200 個請求,於是繼續增加啟動 3 個任務;這時候就有 8 個任務,這樣平均就會到約 120 個請求。

CloudWatch 擴展警示
圖 13、CloudWatch CloudWatch 擴展警示

透過在指標中檢視可以更清楚的看到流量的變動

CloudWatch 在指標中檢視
圖 14、CloudWatch 在指標中檢視

進入 Amazon ECS 主控台,觀察 Clusters > ithomeCluster > Service: ithomeService,點選Events頁簽,可以看到自動擴縮的觸發狀況,先修改所需任務數量 (Successfully set desired count to 5.),接著啟動任務 (started 3 tasks) ,再將這些啟動完成的任務註冊到目標群組 (registered 3 targets in target-group) 中。

Auto Scaling 事件活動-擴展
圖 15、Auto Scaling 事件活動-擴展

關閉 Jmeter 的請求後,約 3 分鐘,就會觸動縮減警示,並根據縮減政策來進行縮減,直接從 11 -> 2 個任務。

Auto Scaling 事件活動-縮減
圖 16、Auto Scaling 事件活動-縮減


上一篇
使用 Container 進行 Auto Scaling Group (2) - Day23
系列文
AWS架構應用24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言