Amazon ec2 根据请求计数使用云形成自动缩放
我们根据负载平衡器RequestCount度量使用云形成进行自动伸缩。目前,如果请求在1分钟内增加到1500,我们将扩展一个实例(每个实例每分钟可以处理1500个请求)。问题是,因为autoscaling组不断检查RequestCount,如果请求计数大于1500并持续1分钟,则添加一个新实例。但这不是必需的,因为我现在有2个实例可以处理3000个req。每分钟。有定制矩阵的设施吗?i、 e.如果添加新实例,则放大策略将更改为3000 req 示例场景: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实例连
如何解决此问题?您要做的是使用负载平衡器的平均值。您可以有不同类型的度量。总和、平均值、最小值、最大值和样本。如果选择Average,它将为loadbalancer下的所有实例提供一个平均值。因此,只有当您组中的所有服务器都以每分钟1500个请求的速度运行时,才会触发新实例启动 类型的快速描述:
- Average—负载平衡器的平均值
- Sum—请求的总数(例如:3000)
- Maximum—任何服务器的最大请求数(因为它可能无法精确平衡)
- 最小-任何服务器的最小请求数(因为它可能无法精确平衡)
- 示例-用于计算平均值的服务器数(基本上是负载平衡器上有多少台服务器)
希望能有所帮助。我通过应用相关的触发策略评估,使基于
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: