Thank you for reading this post, don't forget to subscribe!
Launch Templates
Autoscaling Group
Target group - load balancing
Чтобы освоить балансировку нагрузки и масштабирование на практике, создадим и настроим группу серверов для простого веб-приложения.
Для начала, создадим Target Group - целевую группу. Сделать это можно в разделе Load Balancing сервиса EC2.
Таких групп у нас пока нет, так что просто жмём на “Create target group”
Целевая группа может состоять из инстансов EC2, Лямбда-функций (серверлесс служба AWS, которую мы изучим в следующих модулях) или IP-адресов. Нам нужен Instances:
Введите имя группы, остальные настройки можно оставить
Нужно выбрать протокол для целевой группы:
- HTTP/1.1 или HTTP/2.
- HTTP/2 или gRPC (не все возможности gRPC поддерживаются)
- Чистый gRPC
Сейчас нам лучше подойдёт первый вариант.
Чтобы балансировщик мог направлять входящие запросы только на функционирующие сервера, они должны проходить регулярные “проверки здоровья” (health checks). В этом разделе мы должны их настроить. В рамках данного примера подойдут и стандартные настройки.
В Advanced health check settings давайте кое-что поменяем. Во-первых, снизьте Healthy threshold до трёх, во-вторых, снизьте интервал до 5-10 секунд.
На следующей странице мы можем зарегистрировать целевые сервера, но они ещё не созданы, так что пропускаем
Группа готова, но совершенно пуста. Перейдём во вкладку Instances и запустим Launch Wizard, нажав на “Launch”/
Создавать инстансы вы уже умеете, поэтому я не буду описывать всё в деталях. Пожалуйста, создайте инстансы, используя следующие данные:
- AMI: Amazon Linux 2
- Type: t2.micro
- Number of Instances: 2
Subnet:
- User Data:
1 2 3 4 5 6 |
#!/bin/bash yum update -y amazon-linux-extras install -y nginx1 systemctl start nginx echo "Hello from `hostname`" > /usr/share/nginx/html/index.html |
Затем создайте ещё два сервера с такими же настройками, но уже в Availability Zone B. Ваши подсети могут отличаться - это неважно, но важно, чтобы первые два и вторые два сервера были в разных подсетях одного региона.
Убедитесь, что все 4 сервера запущены и находятся в разных AZ (зонах доступности).
Сервера созданы, но не добавлены в группу, давайте сделаем это. Перейдите в Target Groups и выберите нашу группу.
Перейдите во вкладку Targets.
Нажмите на “Register targets“, выберите созданные сервера и добавьте их, нажав на “Include as pending below”. Завершите регистрацию целей кнопкой “Register pending targets”.
После того как группа сформирована, необходимо подключить балансировщик. Перейдём во вкладку “Load Balancers” и создадим новый.
Нам потребуется Application Load Balancer.
Укажите любое подходящее название для балансировщика. Нам потребуется “Internet-facing” балансировщик с поддержкой IPv4.
Для Application Load Balancer будет автоматически создан listener на порт 80. Этого достаточно, здесь нечего менять.
Далее необходимо выбрать зоны доступности, минимум две. Выбор зон осуществляется через выбор подсетей, поскольку каждая подсеть относится к конкретной
Следующий шаг - Настройки безопасности - мы пропускаем, поскольку выбрали HTTP, а не HTTPS, а значит и сертификата для настройки нет.
В разделе Security Groups создадим новую группу специально для этого балансировщика. Пока что просто разрешим все входящие соединения по порту 80.
В следующем шаге нам нужно указать целевую группу. Выбираем “Exisistring Target Group” и указываем нашу группу.
Следующий шаг пропускаем - цели уже зарегистрированы.
В последнем шаге “Review” стоит просмотреть введённые данные и убедится, что всё хорошо.
Поздравляем! Мы только что создали балансировщик нагрузки с помощью AWS EC2!
странице балансировщика можно узнать DNS адрес и попробовать его открыть, но пока ничего хорошего там не будет, да и статус у наших инстансов “unhealthy” - что-то не так.
Потому что надо настроить безопасность - сейчас доступ к этим серверам ограничен. Создадим группу безопасности:
И разрешим доступ к порту 80 (HTTP), но не для всех, а только из security group нашего балансировщика нагрузки. Таким образом, все запросы к веб-приложению пойдут только через балансировщик.
Назначим эту группу нашим серверам:
Изменения вступят в силу через несколько секунд, и наши сервера начнут отвечать на запросы. Обновите страницу по адресу вашего балансировщика несколько раз, чтобы увидеть ответы от серверов с разными hostname.
всё ок. пашеттттттт.
=================================
Launch Templates
Для настройки автоматизированного масштабирования инфраструктуры нам понадобится шаблон запуска.
Перейдём в Instances -> Launch Templates (Обратите внимание, не Configurations, а именно Templates - Configurations считаются устаревшими и вытеснены шаблонами)
В качестве AMI укажем уже привычный Amazon Linux 2, а тип инстанса - t2.micro (помните, что это единственный тип, подходящий под условия Free Tier.) Добавьте KeyPair, если планируете использовать SSH, но в рамках этого модуля нам подойдёт и EC2 Connect.
В настройках сети выберите VPC - это более продвинутый способ, замещающий устаревший EC2 Classic. Важно: в Security Groups добавьте группу, которую мы будем использовать для настройки доступа балансировщика к инстансам целевой группы.
Теперь Resource Tags - это метки уже не самого шаблона, а тех ресурсов, которые будут созданы на его базе. Добавьте тэг проекта и отметьте в Resource Types как минимум Instances и Volumes (можете отметить и остальное, но в рамках этого проекта другие ресурсы использоваться не будут).
Очень важная настройка в Advanced Details: добавьте уже знакомый скрипт в User Data.
1 2 3 4 5 6 |
#!/bin/bash yum update -y amazon-linux-extras install -y nginx1 systemctl start nginx echo "Hello from `hostname`" > /usr/share/nginx/html/index.html |
Готово
===========================================
Autoscaling Group
Необходимые секгруппы:
- LB (in: 80 any, out: 80 TG)
- TG (in: 80 LB, 22 Any, Out: any any)
В следующем шаге мы можем выбрать варианты используемых инстансов: применять выбор из шаблона или комбинировать он-деманд и спот инстансы. В рамках базового курса мы работаем с более простым вариантом, поэтому давайте остановимся на “Adhere to launch template”.
Тэги уже заданы
ревью
переключить СГ для балансировщика
(in: 80 any, out: 80 any OR 80 TG)
Проверить инстансы в разных зонах
Убедиться, что всё работает
Сломать пару серверов, два способа на выбор:
- cat /dev/random > /dev/null (увеличим нагрузку на CPU и будет скейл до 9)
- sudo systemctl stop nginx (останавливаем службу. При этом поднимется новый, а текущий удалится и scale останется на 3-ёх)
Убираем нагрузку на CPU, чтобы scale упал до 3-ёх. Ждём около 10 минут. Чтобы scale сработал быстрее нужно подключить платный сервис - CloudWatch.
Не забываем подчищать за собой. Удаление абстракции - auto scaling group, удаляет автоматически созданные им инстансы.