6

Мы используем формирование облаков для автоматического масштабирования в соответствии с показателем балансировки нагрузки RequestCount. В настоящее время мы увеличиваем экземпляр, если запрос увеличивается до 1500 в течение 1 минуты (каждый экземпляр может обрабатывать 1500 запросов в минуту). Проблема заключается в том, что группа автомасштабирования постоянно проверяет RequestCount и добавляет новый экземпляр, если количество запросов превышает 1500 в течение 1 минуты. Но это не требуется, поскольку у меня теперь есть 2 экземпляра, которые могут обрабатывать 3000 запросов. в минуту. Есть ли какие-либо средства для создания матриц? т.е. если добавлен новый экземпляр, тогда политика масштабирования изменится на 3000 req.Автоматическое масштабирование с использованием формирования облаков в соответствии с количеством запросов

Пример сценария:

  1. Изначально есть 1 ELB, 1 экземпляр кот прикреплен к ELB (может ручка 1500 REQ в мин.).
  2. 1 облачный вахта с действием масштаба вверх ploicy, если req. кол-во на ELB увеличено до 1500 для мин.
  3. В настоящее время нагрузка на ELB составляет 1500 в течение 1 мин. теперь req. нагрузка увеличивается до 1700 мин. поэтому он добавит новый экземпляр tomcat на ELB. Поэтому у меня есть 2 экземпляра, который может обрабатывать 3000 req. для мин.
  4. Но теперь какая проблема - облачные часы по-прежнему проверяют req. рассчитывать на ELB, и если req. нагрузка составляет 1700 мин. он добавит один новый экземпляр tomcat , который не требуется.

Как я могу исходить из этой проблемы?

ответ

4

Что вы хотите сделать, это использовать среднее значение для балансировки нагрузки. У вас могут быть разные типы показателей. Сумма, Средняя, ​​Минимальная, Максимальная и Образец. Если вы выберете Среднее значение, это даст вам среднее значение для всех экземпляров под загрузчиком. Таким образом, он запускает запуск нового экземпляра только тогда, когда все серверы в вашей группе составляют 1500 запросов в минуту.

Краткое описание типа:

  • Среднее - Среднее для балансировки нагрузки
  • Сумма - общее количество запроса (например: 3000)
  • Максимум - максимальное число запросов любого сервера (так как он может быть не сбалансирован точно)
  • Минимум - минимальное количество запросов на любой сервер (потому что он может быть не сбалансирован точно)
  • Образец - количество серверов, используемых для расчета в конце среднего (в основном, сколько серверов находится на балансировщике нагрузки)

Вы также можете создавать собственные собственные показатели, но вам нужно создать приложение, которое сообщает амазонке, какие значения. Используя облачные часы api, вы можете легко создавать свои собственные. Взгляните сюда http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide/Welcome.html?r=1540

+2

Просто к сведению, что RequestCount можно суммировать или только пробы, а также при использовании RequestCount, самое лучшее, что нужно сделать, это масштаб к «желаемая емкость», а не приращение/уменьшение (см. 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

Я сделал масштабирование, основанное на работе RequestCount, применив Scaling Policy со связанными Cloudwatch alarms, которые инициируют политическую эвакуацию. Ниже вы найдете шаблон CloudFormation, который я использовал в ElasticBeanstalk приложение:

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" 

 Смежные вопросы

  • Нет связанных вопросов^_^