【问题标题】:AWS ECS Scaling based on memoryreservation基于内存预留的 AWS ECS 扩展
【发布时间】:2020-10-19 09:36:38
【问题描述】:

我得到了一个 AWS 环境来照顾,它在 EC2 实例上运行 ECS,并使用 ECS 内存预留配置了扩展。该系统最初是在 Cluster Autoscaling 普遍可用之前运行的,因此它只是使用 cloudwatch 指标来横向扩展和缩减。据我所知,它遵循基本的 AWS 设计。

  • EC2 有一个自动缩放组,允许从 1 到 5 个实例进行缩放,其中 1 是所需的状态。
  • 有 1 个集群服务正在运行,配置了 6 个任务。
  • 其中 5 个任务被配置为最多运行 2 个任务副本,其中 1 个是所需的副本,另一个被设置为最多 1 个。
  • 任务配置了 MemoryReservation(软限制)数字,但没有配置 Memory(硬限制)。
  • 任务主要运行 Java。
  • 最高的内存预留设置为大约 200MB,大部分都在这个数字附近。
  • 横向扩展规则基于 85% 的 MemoryReservation。
  • Docker 统计数据显示,大多数任务正在运行大约 300MB,有些超过 600MB。
  • 实例大小有 4GB 的 RAM。

如果最大预留空间是 2GB,即使任务在现实中消耗的空间更像 3GB,我是否相信永远不会调用横向扩展规则,因为 2GB 是可用 RAM 的 50%?我是否需要将内存预留增加到更实际的值?

另外,如果它只运行一个 EC2 实例,即使我将 MemoryReservation 数字增加到更现实的值,我的想法是否正确,只是因为没有理论上的空间来启动另一个任务,它不会启动第二个 EC2 实例自动地?刚刚从我在搜索时阅读的不同文章中挑选出来的。

谢谢

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-ecs autoscaling


    【解决方案1】:

    一些事情:

    1. Cluster AutoScaling 通常只是 ECS 使用的术语,表示“将实例启动到集群中的 AutoScaling 组”,听起来这就是您当前使用的。容量提供程序是 ECS 更直接地管理 ASG 的较新功能,这可能是您正在考虑的较新功能

    2. “所需容量”不是您为希望组所处的位置设置的状态,它是 AutoScaling 希望在组中存在的当前容量。因此,如果扩展策略启动并显示 +1,则期望值将更改为 2,然后 AutoScaling 将尝试启动一个实例,因为您可能之前只有 1 个(因为期望值之前是 1)

    3. 内存预留基于 2GB 的预留,因此用于扩展目的并不重要。这很重要,因为即使您保留了 6/8GB(来自 3 个 2GB 任务),但正在使用 7.5Gb,ECS 仍将允许启动另一个任务,因为仍有 2 个可保留 GB

    4. 由于 3) 您可能应该增加预留值,不希望实例过载。 Java 可能对 RAM 问题感到讨厌。这也有助于解决横向扩展阈值问题。

    5. 对于第二个问题,只有在触发 cloudwatch 警报后才会进行缩放。因此,如果指标从未超过该阈值,则警报无法触发扩展策略。在很多情况下,仅仅因为警报触发,缩放就不会发生(其中更多的是用于缩放而不是向外扩展,但它仍然可以在向外扩展时发生);但是闹钟进入Alarm状态绝对是必须的一步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-17
      • 2022-01-14
      • 2017-12-11
      • 2021-09-04
      • 2019-12-01
      • 2019-02-13
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多