【问题标题】:What "desired instances" is needed for? AWS Amazon Webservices AutoScaling group需要什么“期望的实例”? AWS Amazon Web Services Auto Scaling 组
【发布时间】:2015-01-09 00:51:29
【问题描述】:

我在 Amazon AWS 上遇到了一个奇怪的情况。我不明白 desired Instances 编号 的用途是什么? 我有一个自动缩放组,其中包含配置的放大和缩小操作。

我有一个自定义 PHP 文件,它根据一些外部因素运行放大缩小操作。我想知道在需要的情况下我必须写哪个数字才不会影响我的自动缩放操作。

例如:

  1. 我将希望设置为 2
  2. 我有 2 个实例正在运行
  3. 我运行 Scale Down 操作
  4. 实例为 1
  5. 自动缩放组将自动启动另一个实例,因此我的缩减没有用,因为我以运行 2 个结束

我能做什么?

非常感谢!

【问题讨论】:

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


    【解决方案1】:

    ASG 将始终尝试保持所需容量。如果您扩大或缩小规模,并且新的实例数量与所需容量不同,ASG 将添加或删除一个实例以恢复到所需容量。

    如果您使用扩展策略并且满足策略条件,ASG 将更改 Desired Capacity 以匹配您的扩展策略的结果。例如,您的 Desired Capacity 为 2,并且有一个策略说如果 CPU 利用率超过阈值则进行扩展。

    如果该策略得到满足,则 Desired Capacity 将增加到 3,依此类推。

    因此,手动向上和向下扩展将导致您的 ASG 将实例数恢复到所需容量。

    如果您想手动放大和缩小,您可以将 Max 和 Min 设置为较宽的值,并在其中移动 Desired Capacity。

    所以你可以做到 Max=10、Min=1、Desired=3。然后,您可以通过更改所需容量来扩大或缩小规模。 (这就是我们使用 Auto Scaling 的方式,我想为什么我之前给了你一个错误的答案。)

    如果您想终止实例并同时更改所需容量,CLI 可以做到这一点。

    请参阅Terminate instance in ASG,以及更一般的 CLI ASG 文档。

    【讨论】:

    • 这是不允许的,我不能设置 unset 因为它说“必须为零或更大”。我该怎么办?
    • 您的意思是通过设置 desired=0 取消设置?如果我想要至少 1 个实例 10 的最大值但不是所需的数量,会发生什么?
    • 我向巴杜拉克道歉。我严重误解了这方面的文档。我正在编辑我的答案以反映这一点。
    • 非常感谢。问题是,如果我想缩小规模,我需要小心选择特定的实例。现在,我将所需容量设置为 Desired-1 并通过 aws php sdk 关闭所选实例。有时它可以工作,但有时它会执行奇怪的操作,对我来说最好取消设置所需的容量,但我不能。我可以尝试别的吗?缩小选择特定实例而不是任何人非常重要
    • 您可以将 ASG 视为“不可变的基础架构”。您可以按比例放大/缩小以替换特定实例,但如果您通过替换实例来部署代码,最好启动一个新的 ASG 来部署新代码。
    【解决方案2】:

    我认为期望值是指在特定时间手动设置多个实例。我认为在 99% 的情况下,您可以设置所需的 == 最小值并让 ASG 策略进行扩展。

    【讨论】:

    • ASG 策略将根据需要进行扩展。您可以从所需 = 最小值开始,但策略的重点是根据需要进行扩展。
    【解决方案3】:

    这些答案都很好,但我想再补充一种情况。

    假设您正在进行蓝/绿部署,并且您有突发流量。您的最小值为 1,因为 50% 的时间您只有 1 个实例。但是,假设您正在执行 CI/CD,并且整天都在进行部署。开发人员可以在实例已扩展到 10 个的大型扩展事件的中间将代码推送到生产环境。现在,如果您使用 terraform 之类的工具来部署自动扩展组等......它会将自动扩展组重置回1 并且您冒着服务中断的风险。

    因此,在部署期间,我们有一个 terraform 覆盖值,我们在调用时以编程方式将其传递给 terraform。在调用 terraform 之前,我们使用 aws cli 计算自动缩放已将实例缩放到的当前所需容量,并将该值传递给 terraform,以便新的自动缩放组提供与前一个相同数量的主机。

    【讨论】:

      【解决方案4】:

      对于使用 Terraform 的蓝/绿部署,您可以考虑最初使用 10 的最大值。部署后,您可以跟进并将 Terraform 中的 desired_capacity 值设置回某个值,并让您为 ASG 设置的任何触发器使其自然缩小。 (请记住,'desired_capacity' 是“应该”在 ASG 中的实例目标,其中 'min_size' 是 ASG 中允许的最小数量)

      https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html

      resource "aws_autoscaling_group" "example" {
        availability_zones = 
        ["${data.aws_availability_zones.available.names}"]
        max_size = 20
        min_size = 2
        desired_capacity = 10
        launch_configuration = "${aws_launch_configuration.example.name}"
      }
      

      【讨论】:

      • 将此作为评论
      • 我会,但我没有足够的声誉。 ¯_(ツ)_/¯
      • 我给你一些,但删除它!!
      【解决方案5】:

      您已将 desired 设置为 2。您的 Auto Scaling 组 (asg) 可以在所需容量之上扩展,但不能低于它。通过指定所需容量,您将 asg 绑定到无论如何保持此容量。如果您的实例少于您的所需容量,您的 asg 将扩大,但不会缩小到所需容量以下。 例如,您想要的容量是 5,并且您正在运行 10 个实例。在这个阶段,asg 可以缩减到 5,但不能低于它。

      【讨论】:

        猜你喜欢
        • 2016-01-17
        • 2018-09-22
        • 2015-08-16
        • 1970-01-01
        • 2016-10-29
        • 2016-03-01
        • 2018-03-25
        • 2019-01-06
        • 2014-01-06
        相关资源
        最近更新 更多