答案1
将内存指标记录到 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
查看参数的详细信息。
答案2
你可以使用我提供的模板脚本这里因为这与我从 EC2 实例本身进行自动扩展的方式相同。我只需在行后添加特定的命令来自动扩展,<SEND_INFORMATION_GATHERED_BY_EMAIL_HERE>
因为我还想知道是什么原因造成的。但请确保您的 EC2 实例中拥有必要的 AWS 提供的工具。
祝你好运!