基于 Amazon SQS 进行扩展

https://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/as-using-sqs-queue.html

此配置有三个主要部分:

  • 一个 Auto Scaling 组,用于管理处理来自 SQS 队列的消息的 EC2 实例。

  • 一个发送到 Amazon CloudWatch 的自定义指标,用于衡量 Auto Scaling 组中每个 EC2 实例的队列的消息数。

  • 一个目标跟踪策略,配置您的 Auto Scaling 组根据自定义指标和设定的目标值进行扩展。CloudWatch 警报调用该扩展策略。

下图演示了此配置的架构。


                    使用队列架构图的 Amazon EC2 Auto Scaling
 

配置 Amazon SQS 扩展

以下部分向您说明如何使用 AWS CLI 为 SQS 队列设置自动扩展。前面的过程假设您已经有一个队列(标准队列或 FIFO 队列)、一个 Auto Scaling 组以及 EC2 实例(运行使用队列的应用程序)。

步骤 1:创建 CloudWatch 自定义指标

首先,从您的 AWS 账户中读取指标以创建自定义计算指标。然后,计算前面的章节中建议的每个实例的积压指标。最后,按照 1 分钟的粒度将该数字发布到 CloudWatch。

只要可能,您应该按照 1 分钟的频率根据 EC2 实例指标进行扩展(也称为详细监控),因为这会确保更快地响应使用率变化。如果将随指标扩展的频率设置为 5 分钟,可能会导致响应速度变慢,并根据过期的指标数据进行扩展。默认情况下,为 EC2 实例启用基本监控,也就是说,实例的指标数据以 5 分钟为间隔提供。您可以启用详细监控,以按照 1 分钟的频率获取实例的指标数据。有关更多信息,请参阅 使用 Amazon CloudWatch 监控 Auto Scaling 组和实例

扫描二维码关注公众号,回复: 7171754 查看本文章

创建 CloudWatch 自定义指标

  1. 使用 SQS get-queue-attributes 命令获取在队列中等待的消息数 (ApproximateNumberOfMessages):

     
    aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \
      --attribute-names ApproximateNumberOfMessages
  2. 使用 describe-auto-scaling-groups 命令获取组的运行容量,这是处于 InService 生命周期状态的实例数。此命令返回 Auto Scaling 组的实例及其生命周期状态。

     
    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
  3. 通过将 ApproximateNumberOfMessages 指标除以队列的运行容量指标来计算每个实例的积压。

  4. 使用 AWS CLI 或 API,按照 1 分钟的粒度将结果发布为 CloudWatch 自定义指标。自定义指标是使用您选择的指标名称和命名空间定义的。自定义指标的命名空间不能以“AWS/”开头。有关发布自定义指标的更多信息,请参阅 Amazon CloudWatch 用户指南 中的发布自定义指标主题。

    以下是一个 CLI put-metric-data 命令的示例。

     
    aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace \
      --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue

应用程序发出所需的指标之后,数据发送到 CloudWatch。该指标会显示在 CloudWatch 控制台中。您可以登录到 AWS 管理控制台并导航到 CloudWatch 页面来访问它。然后,通过导航到指标页面或者使用搜索框搜索指标来查看指标。如需有关查看指标方面的帮助,请参阅 Amazon CloudWatch 用户指南 中的查看可用指标

步骤 2:创建目标跟踪扩展策略

然后,创建目标跟踪扩展策略,指示 Auto Scaling 组在应用程序负载变化时动态地增加或减少组中正在运行的 EC2 实例。您可以使用目标跟踪扩展策略,因为扩展指标是与组容量成比例增加或减少的使用率指标。

创建目标跟踪扩展策略

  1. 使用以下命令可以在您的主目录的 config.json 文件中为扩展策略指定目标值。

    对于 TargetValue,计算每个实例的可接受积压指标并在此处输入。要计算此数值,请考虑正常延迟值并将其除以处理一条消息所需的平均时间。

     
    $ cat ~/config.json
    {
       "TargetValue":100,
       "CustomizedMetricSpecification":{
          "MetricName":"MyBacklogPerInstance",
          "Namespace":"MyNamespace",
          "Dimensions":[
             {
                "Name":"MyOptionalMetricDimensionName",
                "Value":"MyOptionalMetricDimensionValue"
             }
          ],
          "Statistic":"Average",
          "Unit":"None"
       }
    }
  2. 使用 put-scaling-policy 命令以及在前面的步骤中创建的 config.json 文件创建扩展策略:

     
    aws autoscaling put-scaling-policy --policy-name my-scaling-policy --auto-scaling-group-name my-asg \
      --policy-type TargetTrackingScaling --target-tracking-configuration file://~/config.json

    这会创建两个警报:一个用于增加实例数量,另一个用于减少实例数量。它还将返回注册到 CloudWatch 的策略的 Amazon 资源名称 (ARN),CloudWatch 使用该名称在突破指标时调用扩展。

步骤 3:测试扩展策略

在您完成设置后,验证您的扩展策略是否正常工作。要进行测试,可以增加 SQS 队列中的消息数,然后验证您的 Auto Scaling 组是否启动另一个 EC2 实例,也可以减少 SQS 队列中的消息数,然后验证 Auto Scaling 组是否终止一个 EC2 实例。

测试扩展函数

  1. 按照教程:将消息发送到 Amazon SQS 队列中的步骤将消息添加到队列。请确保您增加了队列中的消息数量,使得每个实例的积压指标超过目标值。

    您的更改触发 CloudWatch 警报可能需要几分钟时间。

  2. 使用 describe-auto-scaling-groups 命令确认该组已启动一个实例:

     
    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

测试缩减函数

  1. 按照教程:将消息发送到 Amazon SQS 队列中的步骤从队列中删除消息。请确保您减少了队列中的消息数量,使得每个实例的积压指标低于目标值。

    您的更改触发 CloudWatch 警报可能需要几分钟时间。

  2. 使用 describe-auto-scaling-groups 命令确认该组已终止一个实例:

     
    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

猜你喜欢

转载自www.cnblogs.com/cloudrivers/p/11457278.html
今日推荐