Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 根据请求计数使用云形成自动缩放_Amazon Ec2_Amazon Web Services_Amazon Cloudformation_Amazon Cloudwatch - Fatal编程技术网

Amazon ec2 根据请求计数使用云形成自动缩放

Amazon ec2 根据请求计数使用云形成自动缩放,amazon-ec2,amazon-web-services,amazon-cloudformation,amazon-cloudwatch,Amazon Ec2,Amazon Web Services,Amazon Cloudformation,Amazon Cloudwatch,我们根据负载平衡器RequestCount度量使用云形成进行自动伸缩。目前,如果请求在1分钟内增加到1500,我们将扩展一个实例(每个实例每分钟可以处理1500个请求)。问题是,因为autoscaling组不断检查RequestCount,如果请求计数大于1500并持续1分钟,则添加一个新实例。但这不是必需的,因为我现在有2个实例可以处理3000个req。每分钟。有定制矩阵的设施吗?i、 e.如果添加新实例,则放大策略将更改为3000 req 示例场景: 最初有1个ELB,1个tomcat实例连

我们根据负载平衡器RequestCount度量使用云形成进行自动伸缩。目前,如果请求在1分钟内增加到1500,我们将扩展一个实例(每个实例每分钟可以处理1500个请求)。问题是,因为autoscaling组不断检查RequestCount,如果请求计数大于1500并持续1分钟,则添加一个新实例。但这不是必需的,因为我现在有2个实例可以处理3000个req。每分钟。有定制矩阵的设施吗?i、 e.如果添加新实例,则放大策略将更改为3000 req

示例场景:

  • 最初有1个ELB,1个tomcat实例连接到ELB(can) 处理每分钟1500个请求)
  • 如果需要,1个具有放大功能的云监视。ELB上的计数至少增加到1500
  • 当前ELB上的请求负载为1500,持续1分钟。现在需要。负载增加到1700分钟,因此它将连接一个新的tomcat 以厄尔巴鄂河为例。所以我有2个实例可以处理3000个请求。对于 敏
  • 但是现在什么问题是CloudWatch仍然检查req。根据ELB和if req进行计数。最小负载为1700。它将添加一个新的tomcat 实例,该实例不是必需的

  • 如何解决此问题?

    您要做的是使用负载平衡器的平均值。您可以有不同类型的度量。总和、平均值、最小值、最大值和样本。如果选择Average,它将为loadbalancer下的所有实例提供一个平均值。因此,只有当您组中的所有服务器都以每分钟1500个请求的速度运行时,才会触发新实例启动

    类型的快速描述:

    • Average—负载平衡器的平均值
    • Sum—请求的总数(例如:3000)
    • Maximum—任何服务器的最大请求数(因为它可能无法精确平衡)
    • 最小-任何服务器的最小请求数(因为它可能无法精确平衡)
    • 示例-用于计算平均值的服务器数(基本上是负载平衡器上有多少台服务器)
    您也可以创建自己的自定义指标,但需要创建一个应用程序,告诉amazon这些值是什么。使用CloudWatchAPI,您可以轻松创建自己的应用程序。看看这里

    正如dsummersl所说,不能直接用于平均指标

    我找到了一些解决办法。基本上,它们告诉您定义一个定制的CloudWatch度量,这样您就可以检测实例以发出它们正在接收的请求数

    为此,您需要收集每个实例的请求计数,并使用或创建一个数据库将其发送到cloudwatch,以便EBS为您完成这项工作(我认为这是最简单的方法)

    然后,可以将“自动缩放”设置为基于该自定义度量向上/向下缩放


    希望能有所帮助。

    我通过应用相关的触发策略评估,使基于
    RequestCount
    的缩放工作正常。在下面,您可以找到我在ElasticBeanstalk应用程序中使用的cloudformation模板:

       RequestCountScalingAlarmLt2000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions:
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when Request Count < 2000"
           AlarmName: {"Fn::Join": ["-", ["Scale when Request Count < 2000", { "Ref":"AWSEBEnvironmentName" }]]}
           ComparisonOperator: LessThanThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 2000
       RequestCountScalingAlarmGt2000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions:
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when 2000 < Request Count < 20000"
           AlarmName: "Scale when Request 2000 < Count < 20000"
           ComparisonOperator: GreaterThanOrEqualToThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 2000
       RequestCountScalingAlarmGt20000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions:
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when 20000 < Request Count < 30000"
           AlarmName: "Scale when 20000 < Request Count < 30000"
           ComparisonOperator: GreaterThanOrEqualToThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 20000
       RequestCountScalingAlarmGt30000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions:
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when 30000 < Request Count < 40000"
           AlarmName: "Scale when 30000 < Request Count < 40000"
           ComparisonOperator: GreaterThanOrEqualToThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 30000
       RequestCountScalingAlarmGt40000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions::
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when 40000 < Request Count < 50000"
           AlarmName: "Scale when 40000 < Request Count < 50000"
           ComparisonOperator: GreaterThanOrEqualToThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 40000
       RequestCountScalingAlarmGt50000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions:
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when 50000 < Request Count < 60000"
           AlarmName: "Scale when 50000 < Request Count < 60000"
           ComparisonOperator: GreaterThanOrEqualToThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 50000
       RequestCountScalingAlarmGt60000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions::
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when 60000 < Request Count < 70000"
           AlarmName: "Scale when 60000 < Request Count < 70000"
           ComparisonOperator: GreaterThanOrEqualToThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 60000
       RequestCountScalingAlarmGt70000:
         Type: "AWS::CloudWatch::Alarm"
         Properties:
           ActionsEnabled: true
           AlarmActions:
             - Ref: RequestCountScalingPolicy
           OKActions:
             - Ref: RequestCountScalingPolicy
           AlarmDescription: "Scale when Request Count >= 70000"
           AlarmName: "Scale when Request Count >= 70000"
           ComparisonOperator: GreaterThanOrEqualToThreshold
           Dimensions:
             - Name: LoadBalancerName
               Value:
                 Ref: AWSEBLoadBalancer
           EvaluationPeriods: "1"
           MetricName: RequestCount
           Namespace: AWS/ELB
           Period: "300"
           Statistic: Sum
           Threshold: 70000
       RequestCountScalingPolicy:
         Type: "AWS::AutoScaling::ScalingPolicy"
         Properties:
           AutoScalingGroupName:
             Ref: "AWSEBAutoScalingGroup"
           AdjustmentType: "ExactCapacity"
           PolicyType: "StepScaling"
           EstimatedInstanceWarmup: 120
           StepAdjustments:
             -
               MetricIntervalLowerBound: "0"
               MetricIntervalUpperBound: "2000"
               ScalingAdjustment: "1"
             -
               MetricIntervalLowerBound: "2000"
               MetricIntervalUpperBound: "20000"
               ScalingAdjustment: "2"
             -
               MetricIntervalLowerBound: "20000"
               MetricIntervalUpperBound: "30000"
               ScalingAdjustment: "3"
             -
               MetricIntervalLowerBound: "30000"
               MetricIntervalUpperBound: "40000"
               ScalingAdjustment: "4"
             -
               MetricIntervalLowerBound: "40000"
               MetricIntervalUpperBound: "50000"
               ScalingAdjustment: "5"
             -
               MetricIntervalLowerBound: "50000"
               MetricIntervalUpperBound: "60000"
               ScalingAdjustment: "6"
             -
               MetricIntervalLowerBound: "60000"
               MetricIntervalUpperBound: "70000"
               ScalingAdjustment: "7"
             -
               MetricIntervalLowerBound: "70000"
               ScalingAdjustment: "8"
    
    RequestCountScalingAlarmLt2000:
    类型:“AWS::CloudWatch::Alarm”
    特性:
    可采取的行动:正确
    报警操作:
    -Ref:RequestCountScalingPolicy
    行动:
    -Ref:RequestCountScalingPolicy
    AlarmDescription:“请求计数<2000时缩放”
    AlarmName:{“Fn::Join”:[“-”,[“请求计数<2000时的缩放”,{“Ref”:“AWSEBEnvironmentName”}]}
    比较运算符:小于阈值
    尺寸:
    -名称:LoadBalancerName
    价值:
    参考:AWSEB负载平衡器
    评估期:“1”
    MetricName:RequestCount
    名称空间:AWS/ELB
    期间:“300”
    统计数字:总和
    阈值:2000
    RequestCountScalingAlarmGt2000:
    类型:“AWS::CloudWatch::Alarm”
    特性:
    可采取的行动:正确
    报警操作:
    -Ref:RequestCountScalingPolicy
    行动:
    -Ref:RequestCountScalingPolicy
    AlarmDescription:“2000<请求计数<20000时缩放”
    AlarmName:“请求2000<计数<20000时的刻度”
    比较运算符:大于或等于阈值
    尺寸:
    -名称:LoadBalancerName
    价值:
    参考:AWSEB负载平衡器
    评估期:“1”
    MetricName:RequestCount
    名称空间:AWS/ELB
    期间:“300”
    统计数字:总和
    阈值:2000
    RequestCountScalingAlarmGt20000:
    类型:“AWS::CloudWatch::Alarm”
    特性:
    可采取的行动:正确
    报警操作:
    -Ref:RequestCountScalingPolicy
    行动:
    -Ref:RequestCountScalingPolicy
    AlarmDescription:“20000<请求计数<30000时缩放”
    AlarmName:“20000<请求计数<30000时的刻度”
    比较运算符:大于或等于阈值
    尺寸:
    -名称:LoadBalancerName
    价值:
    参考:AWSEB负载平衡器
    评估期:“1”
    MetricName:RequestCount
    名称空间:AWS/ELB
    期间:“300”
    统计数字:总和
    阈值:20000
    RequestCountScalingAlarmGt30000:
    类型:“AWS::CloudWatch::Alarm”
    特性:
    可采取的行动:正确
    报警操作:
    -Ref:RequestCountScalingPolicy
    行动:
    -Ref:RequestCountScalingPolicy
    AlarmDescription:“30000<请求计数<40000时缩放”
    AlarmName:“30000<请求计数<40000时的刻度”
    比较运算符:大于或等于阈值
    尺寸:
    -名称:LoadBalancerName
    价值:
    参考:AWSEB负载平衡器
    评估期:“1”
    MetricName:RequestCount
    名称空间:AWS/ELB
    期间:“300”
    统计数字:总和
    阈值:30000
    RequestCountScalingAlarmGt40000: