Назад | Перейти на главную страницу

Автоматическое масштабирование инстансов AWS EC2 в зависимости от использования памяти

Я настраиваю автоматическое масштабирование на основе памяти, потребляемой конкретным экземпляром. Я прошел по ссылке, размещенной на awsforums. Я смог установить свои метрики и использовать предоставленный сценарий bash с теми же переменными.

Разбираясь, как установить автоматическое масштабирование на основе этих показателей, я узнал о кучке сценариев bash в сайт хостинга проектов google. Я не могу установить показатели.

Как я мог двигаться дальше?

После того, как у вас есть метрики памяти, зарегистрированные в Cloudwatch, вам просто нужно настроить автомасштабирование, как и для любой существующей метрики.

Во-первых, как и для всех инструментов командной строки AWS, вам необходимо установить (экспортировать):

  • AWS_CREDENTIAL_FILE или
  • оба: EC2_PRIVATE_KEY и EC2_CERT

Затем вы запускаете следующие три команды, изменяя их в соответствии с вашими потребностями (они запускаются только из командной строки - один раз, а не из cron).

Создайте конфигурацию запуска: Вам нужно передать как минимум изображение и тип экземпляра, дополнительные параметры необязательны, но, вероятно, это хорошая идея.

as-create-launch-config
        LaunchConfigurationName  --image-id  value  --instance-type  value
       [--block-device-mapping  "key1=value1,key2=value2..." ] [--kernel  value]
       [--key  value ] [--ramdisk  value ] [--group  value[,value...] ]
       [--user-data  value ] [--user-data-file  value ]  [General Options]

Например:

as-create-launch-config config-name --image-id AMI-xxxxxxxx --instance-type m1.small --key keypair-name --group security-group-name

Создайте группу автомасштабирования: Здесь мы определяем параметры масштабирования - где будут запускаться экземпляры, ограничения на количество экземпляров и связываем группу с созданной нами конфигурацией.

as-create-auto-scaling-group
        AutoScalingGroupName  --availability-zones  value[,value...]
        --launch-configuration  value  --max-size  value  --min-size  value
       [--cooldown  value ] [--load-balancers  value[,value...] ]
        [General Options]

Например:

as-create-auto-scaling-group as-group-name --availability-zones us-east-1a --launch-configuration config-name --min-size 1 --max-size 5 --cooldown 300

(Вы также можете указать --desired-capacity, который представляет собой количество экземпляров для начала, если оно отличается от минимального размера)

Создайте политику для масштабирования с помощью: Здесь мы определяем действие, которое будет выполняться при срабатывании сигнала тревоги, и связываем политику с определенной группой автомасштабирования. Создайте одну политику для увеличения и одну для уменьшения.

as-put-scaling-policy
        PolicyName  --type  value  --auto-scaling-group  value  --adjustment
       value [--cooldown  value ]  [General Options]

Эта команда выводит ARN, который потребуется для связи политики с сигналом тревоги облачного наблюдения - запишите ARN. Каждая команда будет возвращать другой ARN - т.е. у вас будет 2 ARN - помните, какой из них для какой политики.

Например:

Увеличить масштаб:

 as-put-scaling-policy HighMemPolicy --auto-scaling-group as-group-name  --adjustment=1 --type ChangeInCapacity  --cooldown 300

Уменьшать:

as-put-scaling-policy LowMemPolicy --auto-scaling-group as-group-name  --adjustment=-1 --type ChangeInCapacity  --cooldown 300

Пример возврата:

POLICY-ARN arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/abc-1234-def-567

Создайте будильник Cloudwatch для каждого случая: Нам нужно использовать собранные нами данные для срабатывания сигнала тревоги при определенных обстоятельствах, а затем заставить этот сигнал тревоги выполнять соответствующую политику масштабирования. Вам потребуется 2 будильника - один для верхнего порога и один для нижнего порога.

mon-put-metric-alarm
        AlarmName  --comparison-operator  value  --evaluation-periods  value
        --metric-name  value  --namespace  value  --period  value  --statistic
       value  --threshold  value [--actions-enabled  value ] [--alarm-actions
       value[,value...] ] [--alarm-description  value ] [--dimensions
       "key1=value1,key2=value2..." ] [--insufficient-data-actions
       value[,value...] ] [--ok-actions  value[,value...] ] [--unit  value ]
        [General Options]

Например:

Верхний порог:

mon-put-metric-alarm HighMemAlarm  --comparison-operator  GreaterThanThreshold  --evaluation-periods  4 --metric-name  UsedMemoryPercent  --namespace  "AWS/EC2"  --period  60  --statistic Average --threshold  85 --alarm-actions arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/abc-1234-def-567 --dimensions "AutoScalingGroupName=as-group-name"

Нижний порог:

mon-put-metric-alarm LowMemAlarm  --comparison-operator  LessThanThreshold --evaluation-periods  4 --metric-name  UsedMemoryPercent --namespace  "AWS/EC2"  --period  60  --statistic Average --threshold  60  --alarm-actions arn:aws:autoscaling:us-east-1:0123456789:scalingPolicy/bcd-2345-efg-678 --dimensions "AutoScalingGroupName=as-group-name"

В приведенном выше примере мы используем метрику UsedMemoryPercent (из скрипта форума) и смотрим на «среднее значение за 60 секунд». Для первого сигнала тревоги, если это среднее превышает 85% для 4 последовательных выборок (т. Е. 4 минут), мы активируем сигнал тревоги (и выполним действие). Для второго сигнала тревоги мы ищем «менее 60%».

Хорошие ссылки включают:

Запустите команду с --help чтобы увидеть подробную информацию о параметрах.

Вы можете использовать предоставленный мной шаблонный скрипт Вот потому что таким же образом я делаю автоматическое масштабирование из самого экземпляра EC2. Мне нужно только добавить определенные команды для автоматического масштабирования сразу после строк <SEND_INFORMATION_GATHERED_BY_EMAIL_HERE> потому что я также хочу знать, что вызывает что. Но убедитесь, что у вас есть необходимые инструменты, предоставленные AWS, внутри вашего экземпляра EC2.

Удачи!