6

ロードバランサのRequestCountメトリックに基づいて自動スケーリングにクラウドフォーメーションを使用しています。現在、要求が1分間に1500に増加した場合(各インスタンスは毎分1500リクエストを処理できます)、インスタンスをスケールアップします。問題は、オートスケーリンググループがRequestCountを継続的にチェックし、リクエストカウントが1分間に1500を超える場合、新しいインスタンスを追加するためです。しかし、今は3000 reqを処理できる2つのインスタンスがあるので、これは必須ではありません。毎分。行列をカスタム化するための機能はありますか?すなわち、新しいインスタンスが追加された場合、スケールアップポリシーは3000reqに変更される。要求数に応じたクラウド形成を使用した自動スケーリング

例のシナリオ:

  1. まず1 ELB、ELBに取り付けられた1つのTomcatインスタンスは、(。 1500 REQ毎分を処理することができる)があります。
  2. スケールアップアクションの1つの雲の時計がreq。 ELBのカウントは、分で1500に増加します。
  3. 現在、ELBの要求負荷は1分間1500です。今req。負荷は1700分に増加します。そこで、ELBに新しいtomcat インスタンスを添付します。だから私は3000 reqを処理することができる2つのインスタンスがあります。 分。
  4. しかし、今ではクラウドウォッチがreqをまだチェックしています。 ELBでカウントし、reqであればカウントします。負荷は1700分です。新しいtomcat インスタンスを追加する必要はありません。

どうすればこの問題が解決できますか?

答えて

4

ロードバランサの平均を使用します。さまざまなタイプのメトリックを使用できます。合計、平均、最小、最大、およびサンプル。 Averageを選択すると、ロードバランサの下にあるすべてのインスタンスの平均が得られます。したがって、グループ内のすべてのサーバーが1分あたり1500リクエストになると、新しいインスタンスの起動がトリガーされます。

型の概要:

平均
  • から
  • ロード・バランサの平均合計 - 要求(例:3000)の総数
  • 最大 - 要求の最大数の任意のサーバー
  • 最小 - 任意のサーバーが持つ要求の最小数(正確に均衡していない可能性があるため)
  • サンプル - 計算に使用されたサーバーの数(基本的に、ロードバランサに搭載されているサーバーの数)

独自のカスタムメトリックも作成できますが、アマゾンに値が何であるかを示すアプリケーションを作成する必要があります。クラウドウォッチAPIを使用すると、自分で簡単に作成することができます。ここをクリックしてくださいhttp://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide/Welcome.html?r=1540

+2

だけのノートをインクリメント/デクリメントではなく「希望の容量」(https://forums.aws.amazon.com/thread.jspa?threadID=86073を参照)。 – dsummersl

+0

良い点は、RequestCountに平均がないため、このようにしなければならないことです。私はその感謝を忘れてしまった。 – bwight

+0

はい、この場合有効な回答ではありません。 –

1

dsummerslと述べたように、RequestCountは平均メトリックですぐに使用できません。

私はいくつかの回避策を見つけましたhere。基本的に、カスタムCloudWatchメトリックを定義するように指示するので、受け取っているリクエスト数をインスタンスに送信するように設定できます。

これは、各インスタンスからのリクエスト数を収集し、put-metric-dataを使用してそれをクラウドウォッチに送信するか、またはebextensionを作成してEBSがそれを行うようにする必要があります(これは最も簡単な方法です)。

次に、そのカスタムメトリックに基づいて自動スケーリングを拡大/縮小するように設定できます。

希望します。

0

私はScaling PolicyCloudwatch alarmsというトリガポリシーを適用して適用して、RequestCountに基づいてスケーリングを作成しました。以下は、私がElasticBeanstalkアプリで使用してきたcloudformationテンプレート見つける:RequestCountのみを合算またはサンプリングし、RequestCountを使用する際に、行うための最善のことはに拡張されることができることを

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" 
関連する問題