如何设置基于内存的自动扩展策略

如何设置基于内存的自动扩展策略

我能够设置自动扩展策略,并且测试运行良好,我正在使用 EC2 小型实例来运行 Ruby on Rails 应用程序,因为 Rails 更像是内存密集型平台,所以我想根据内存而不是 CPU 利用率来扩展 EC2 实例。我昨天在谷歌上搜索了一下,但没有找到任何能真正帮助我的结果。

任何的意见都将会有帮助。

答案1

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"

该脚本从“free”列下的“-/+ buffers/cache”行中获取数字,作为“total”(在“Mem”行下)的百分比,并设置 2 个指标 - 内存使用百分比和可用内存总量(MB)。

所有的 AWS API 工具都非常慢(相对而言) - 如果可能的话,直接从某些受支持的语言(例如 Ruby)使用 API,您将获得比上面的脚本更好的性能。

修改上述脚本以满足您的需求(您可能不需要这两个指标等),并将其设置为每隔几分钟通过 cron 运行一次。请记住,您可以免费获得有限数量的自定义/详细指标和警报,之后需要每月付费。

还有一个 Google Code 项目 - 'AWS 缺少工具' 其中有用于监控内存使用情况和一些其他可能有用的指标的脚本。

一旦您的指标设置完毕并开始运行,请为其创建一个警报,并as-put-scaling-policy像对待任何预定义指标一样继续进行自动缩放(等)。

答案2

亚马逊刚刚更新(2013 年 2 月)他们的CloudWatch脚本,现在您可以选择观看相当多的信息:

  • 内存利用率- 应用程序和操作系统分配的内存(不包括缓存和缓冲区)(以百分比表示)。
  • 已用内存- 应用程序和操作系统分配的内存,不包括缓存和缓冲区,以兆字节为单位。
  • 可用内存- 可供应用程序和操作系统使用的系统内存(以兆字节为单位)。
  • 磁盘空间利用率- 磁盘空间使用率以百分比表示。
  • 已用磁盘空间- 磁盘空间使用情况(以千兆字节为单位)。
  • 可用磁盘空间- 可用磁盘空间(以 GB 为单位)。
  • 交换空间利用率- 交换空间使用率(以百分比表示)。
  • 已使用的交换空间- 交换空间使用情况(以兆字节为单位)。

您可以下载适用于 Linux 的 CloudWatch 监控脚本并检查完整的文档。

完整 AWS PR 来源: http://aws.typepad.com/aws/2013/02/cloudwatch-monitoring-scripts-updated.html

相关内容