根據記憶體使用率自動擴展 AWS EC2 實例
我正在根據特定實例消耗的記憶體設置自動縮放。我瀏覽了awsforums上發布的連結。我能夠設置我的指標並使用給定的 bash 腳本和相同的變數。
在弄清楚如何根據這些指標設置自動縮放時,我開始了解google 項目託管站點上的一堆 bash 腳本。我無法設置指標。
我怎麼能走得更遠?
將記憶體指標記錄到 Cloudwatch 後,您只需像設置任何現有指標一樣設置自動縮放。
首先,與所有 AWS 命令行工具一樣,您需要設置(導出):
- AWS_CREDENTIAL_FILE 或
- 兩者:EC2_PRIVATE_KEY 和 EC2_CERT
接下來,您執行以下三個命令,根據您的需要修改它們(這些只是從命令行執行 - 一次 - 而不是從 cron 執行)。
創建啟動配置: 您至少需要傳遞圖像和實例類型,其他參數是可選的,但可能是個好主意。
as-create-launch-config LaunchConfigurationName --image-id value --instance-type value [--block-device-mapping "key1=value1,key2=value2..." ] [--kernel value] [--key value ] [--ramdisk value ] [--group value[,value...] ] [--user-data value ] [--user-data-file value ] [General Options]
例如:
as-create-launch-config config-name --image-id AMI-xxxxxxxx --instance-type m1.small --key keypair-name --group security-group-name
創建自動縮放組: 在這裡我們定義了縮放參數——實例將在哪裡啟動,實例數量的限制,並將組與我們創建的配置相關聯。
as-create-auto-scaling-group AutoScalingGroupName --availability-zones value[,value...] --launch-configuration value --max-size value --min-size value [--cooldown value ] [--load-balancers value[,value...] ] [General Options]
例如:
as-create-auto-scaling-group as-group-name --availability-zones us-east-1a --launch-configuration config-name --min-size 1 --max-size 5 --cooldown 300
(您還可以指定一個 –desired-capacity ,它是要開始的實例數,如果它與最小大小不同)
創建要擴展的策略: 在這裡,我們定義觸發警報時將執行的操作,並將策略與特定的自動擴展組相關聯。創建一項擴大規模和一項縮小規模的政策。
as-put-scaling-policy PolicyName --type value --auto-scaling-group value --adjustment value [--cooldown value ] [General Options]
此命令輸出將策略與 cloudwatch 警報關聯所需的 ARN - 記下 ARN。每個命令將返回一個不同的 ARN - 即您將有 2 個 ARN - 記住哪個用於哪個策略。
例如:
放大:
as-put-scaling-policy HighMemPolicy --auto-scaling-group as-group-name --adjustment=1 --type ChangeInCapacity --cooldown 300
縮小:
as-put-scaling-policy LowMemPolicy --auto-scaling-group as-group-name --adjustment=-1 --type ChangeInCapacity --cooldown 300
範例返回:
POLICY-ARN arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/abc-1234-def-567
為每個案例創建一個 Cloudwatch 警報: 我們需要使用我們收集的數據在特定情況下觸發警報,然後讓該警報執行適當的擴展策略。您將需要 2 個警報 - 一個用於上限門檻值,一個用於下限門檻值。
mon-put-metric-alarm AlarmName --comparison-operator value --evaluation-periods value --metric-name value --namespace value --period value --statistic value --threshold value [--actions-enabled value ] [--alarm-actions value[,value...] ] [--alarm-description value ] [--dimensions "key1=value1,key2=value2..." ] [--insufficient-data-actions value[,value...] ] [--ok-actions value[,value...] ] [--unit value ] [General Options]
例如:
上限門檻值:
mon-put-metric-alarm HighMemAlarm --comparison-operator GreaterThanThreshold --evaluation-periods 4 --metric-name UsedMemoryPercent --namespace "AWS/EC2" --period 60 --statistic Average --threshold 85 --alarm-actions arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/abc-1234-def-567 --dimensions "AutoScalingGroupName=as-group-name"
下限:
mon-put-metric-alarm LowMemAlarm --comparison-operator LessThanThreshold --evaluation-periods 4 --metric-name UsedMemoryPercent --namespace "AWS/EC2" --period 60 --statistic Average --threshold 60 --alarm-actions arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/bcd-2345-efg-678 --dimensions "AutoScalingGroupName=as-group-name"
在上面的範例中,我們使用度量標準“UsedMemoryPercent”(來自論壇腳本)並查看“平均超過 60 秒”。對於第一個警報,如果連續 4 個樣本(即 4 分鐘)的平均值超過 85%,我們將觸發警報(並執行操作),對於第二個警報,我們尋找“小於 60%”。
好的參考資料包括:
- http://docs.amazonwebservices.com/AutoScaling/latest/DeveloperGuide/US_SetUpASLBApp.html
- http://awsdocs.s3.amazonaws.com/AutoScaling/latest/as-qrc.pdf
執行命令
--help
以查看參數的詳細資訊。