如何根据同一指标的多个限制配置 EC2 自动缩放?
How to configure EC2 autoscaling based on multiple limits on same metric?
我的主要需求如下:
当 CPU 个实例的消耗量超过 50% 时,将自动缩放组的容量调整为 5 个实例,当 CPU 消耗量超过 80% 时,则将容量调整为 10 个实例。
但是,如果我使用 cloudwatch 警报来设置容量,我可以想象以下竞争条件:
- 存在 5 个实例
- CPU消耗超过80%
- 触发警报
- 容量更改为 19 个实例
- CPU 消费下降到 50% 以下
- 最终 CPU 消耗再次超过 50%,但现在容量将更改为 5 个实例(这是我不希望发生的事情)
因此,我最希望发生的事情是响应警报触发,我希望确保容量至少达到相应的阈值。
我知道这可以通过 AWS SDK 手动设置容量来完成 - 这可以响应主管监控的生命周期事件而触发,但是是否有更好的方法,最好是不需要设置的方法为警报设置额外的主管或 webhooks ?
一种通用的方法是细化缩放操作:
不要跳那么大:
if the ASG avg CPU is over 70% > Add an instance
if the ASG avg CPU is over 90% > Add "n" instances
if the ASG avg CPU is under 40% > remove an instance
if the ASG avg CPU is under 10% > remove "n" instance
所有这些值都是最近 5 分钟的 AVG。所以如果你有一个非常快的梭子鱼,你需要更积极的缩放。所以在半小时内你可以轻松添加6台服务器甚至更多。
此外,数字越大,缩放效果越好。因此,如果您的系统只需要 1-3 个实例,则减小实例大小可能很有意义,这样您就可以拥有 2-6 个实例。它为您的系统提供了一些额外的灵活性。
但问题又来了,您的预期负载是多少?大矛或预期的白天涨跌?
我建议查看 AWS lambda 函数,该函数由来自 cloudwatch 的 SNS 消息触发 - 它应该让您自由支配,可以根据需要将尽可能多的逻辑放入扩展决策中。
祝你好运!
我的主要需求如下:
当 CPU 个实例的消耗量超过 50% 时,将自动缩放组的容量调整为 5 个实例,当 CPU 消耗量超过 80% 时,则将容量调整为 10 个实例。
但是,如果我使用 cloudwatch 警报来设置容量,我可以想象以下竞争条件:
- 存在 5 个实例
- CPU消耗超过80%
- 触发警报
- 容量更改为 19 个实例
- CPU 消费下降到 50% 以下
- 最终 CPU 消耗再次超过 50%,但现在容量将更改为 5 个实例(这是我不希望发生的事情)
因此,我最希望发生的事情是响应警报触发,我希望确保容量至少达到相应的阈值。
我知道这可以通过 AWS SDK 手动设置容量来完成 - 这可以响应主管监控的生命周期事件而触发,但是是否有更好的方法,最好是不需要设置的方法为警报设置额外的主管或 webhooks ?
一种通用的方法是细化缩放操作: 不要跳那么大:
if the ASG avg CPU is over 70% > Add an instance
if the ASG avg CPU is over 90% > Add "n" instances
if the ASG avg CPU is under 40% > remove an instance
if the ASG avg CPU is under 10% > remove "n" instance
所有这些值都是最近 5 分钟的 AVG。所以如果你有一个非常快的梭子鱼,你需要更积极的缩放。所以在半小时内你可以轻松添加6台服务器甚至更多。
此外,数字越大,缩放效果越好。因此,如果您的系统只需要 1-3 个实例,则减小实例大小可能很有意义,这样您就可以拥有 2-6 个实例。它为您的系统提供了一些额外的灵活性。
但问题又来了,您的预期负载是多少?大矛或预期的白天涨跌?
我建议查看 AWS lambda 函数,该函数由来自 cloudwatch 的 SNS 消息触发 - 它应该让您自由支配,可以根据需要将尽可能多的逻辑放入扩展决策中。
祝你好运!