如何在 Amazon EC2 上配置基于内存的 Auto Scaling?
Posted
技术标签:
【中文标题】如何在 Amazon EC2 上配置基于内存的 Auto Scaling?【英文标题】:How to configure memory based Auto Scaling on Amazon EC2? 【发布时间】:2011-03-01 07:42:21 【问题描述】:我正在 EC2 实例上部署 Rails 应用程序,我想在其中配置 Auto Scaling 以与 Elastic Load Balancer 一起使用。在特定阈值上,我想生成一个新实例。在为 Auto Scaling 组配置触发器时,我们有 CPU 利用率、网络或磁盘 IO 选项;但作为一个 Rails 应用程序,我将面临内存而不是 CPU 或 IO 的资源紧缩。
是否有人为 Rails 应用程序成功配置了 EC2 Auto Scaling?将 AWS 与 rails 一起使用的首选方式是什么?
仅供参考:我将乘客用作应用程序服务器。
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:我没有使用 Rails,而是使用 Tomcat 中的 java。我们使用 tomcat 阀门/脚本来检测内存使用情况并将其作为自定义云监视指标发布到 Amazon cloudWatch。您可以根据监控此指标的 cloudwatch 警报创建横向扩展触发器。
上述技术的某些部分甚至可以重叠用于铁轨。
【讨论】:
【参考方案2】:实际上,我认为您应该尝试根据您使用的实例类型调整您的乘客配置(这里有一篇关于此的文章:http://blog.scoutapp.com/articles/2009/12/08/production-rails-tuning-with-passenger-passengermaxprocesses)。这应该确保在满载时您使用了所有可用的 RAM,但您生成的乘客实例不会超过可用的 RAM。
根据我的经验,这会导致所有资源(CPU 和 RAM)饱和,您可以根据 CPU 使用情况触发自动缩放策略。您还应该调整实例类型以获得最佳性能(我使用 cc1.xlarge 实例取得了相当大的成功)。
如果您设置了基于 RAM 的自动缩放,您应该能够在 CloudWatch 上创建一个指标来监控 RAM 使用情况并使用该指标进行自动缩放。创建指标只是使用 CloudWatch API (http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/CloudWatch/Metric.html) 定期发布指标数据。您可以创建一个每分钟运行一次并发布指标数据的 rails 后台任务。
【讨论】:
【参考方案3】:我认为您可以使用新的信号功能,监控内存指标并使用 api 启动实例:
http://aws.typepad.com/aws/2010/12/amazon-cloudwatch-alarms.html
【讨论】:
博文没有提及任何有关信号功能的内容。以上是关于如何在 Amazon EC2 上配置基于内存的 Auto Scaling?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Amazon EC2 主机上设置 Django 网站?
如何在 Amazon 的 EC2 上运行 Java 服务器?