我能够设置自动缩放策略并且测试工作正常,我使用 EC2 小实例来运行 Ruby on Rails 应用程序,因为 Rails 更像是内存密集型平台我想根据内存而不是 CPU 利用率来扩展 EC2 实例. 我昨天用谷歌搜索,但没有得到任何实际上对我有帮助的结果。
任何的意见都将会有帮助。
EC2 上的自动扩展基于来自 Cloudwatch 的触发器。默认情况下,Cloudwatch 不收集有关内存使用情况的数据(官方原因是此类指标的影响需要“查看实例中运行的操作系统”)
因此,解决方案是设置自定义指标来监控内存使用情况,将警报附加到该指标,然后根据该警报制定扩展策略。
亚马逊在这个论坛帖子中很好地描述了这个过程。
首先,您有一个脚本可以从“免费”(从上面的页面复制)收集数据:
#!/bin/bash
export AWS_CLOUDWATCH_HOME=/home/ec2-user/CloudWatch-1.0.12.1
export AWS_CREDENTIAL_FILE=$AWS_CLOUDWATCH_HOME/credentials
export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/jre
# get ec2 instance id
instanceid=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
memtotal=`free -m | grep 'Mem' | tr -s ' ' | cut -d ' ' -f 2`
memfree=`free -m | grep 'buffers/cache' | tr -s ' ' | cut -d ' ' -f 4`
let "memused=100-memfree*100/memtotal"
mon-put-data --metric-name "FreeMemoryMBytes" --namespace "System/Linux" --dimensions "InstanceId=$instanceid" --value "$memfree" --unit "Megabytes"
mon-put-data --metric-name "UsedMemoryPercent" --namespace "System/Linux" --dimensions "InstanceId=$instanceid" --value "$memused" --unit "Percent"
Run Code Online (Sandbox Code Playgroud)
该脚本从 'free' 列下的 '-/+ buffers/cache' 行中获取数字,作为 'total' 的百分比(在 'Mem' 行下),并设置 2 个指标 - 使用的内存百分比,以及以 MB 为单位的可用内存总量。
所有 AWS API 工具都非常慢(相对而言) - 如果可能,直接从某些受支持的语言(例如 Ruby)使用 API,您将获得比上述脚本更好的性能。
修改上面的脚本以满足您的需要(您可能不需要这两个指标等)并将其设置为通过 cron 每隔几分钟运行一次。请记住,您可以免费获得数量有限的自定义/详细指标和警报,之后是每月费用。
还有一个 Google Code 项目 - “ Aws Missing Tools ”,其中包含用于监控内存使用情况的脚本和一些其他可能有用的指标。
一旦您设置好指标并开始运行,请为其创建警报并as-put-scaling-policy像处理任何预定义指标一样继续进行自动缩放(等)。
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |