10 aws масштабирование

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:

Затем создай­те ещё два сер­ве­ра с таки­ми же настрой­ка­ми, но уже в 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.

Гото­во

 

===========================================

Autoscaling Group

 

Необ­хо­ди­мые секгруппы:

  1. LB (in: 80 any, out: 80 TG)
  2. TG (in: 80 LB, 22 Any, Out: any any)

В сле­ду­ю­щем шаге мы можем выбрать вари­ан­ты исполь­зу­е­мых инстан­сов: при­ме­нять выбор из шаб­ло­на или ком­би­ни­ро­вать он-деманд и спот инстан­сы. В рам­ках базо­во­го кур­са мы рабо­та­ем с более про­стым вари­ан­том, поэто­му давай­те оста­но­вим­ся на “Adhere to launch template”.

Тэги уже заданы

ревью

пере­клю­чить СГ для балансировщика

(in: 80 any, out: 80 any OR 80 TG)

Про­ве­рить инстан­сы в раз­ных зонах

Убе­дить­ся, что всё работает

Сло­мать пару сер­ве­ров, два спо­со­ба на выбор:

  1. cat /dev/random > /dev/null (уве­ли­чим нагруз­ку на CPU и будет скейл до 9)
  2. sudo systemctl stop nginx (оста­нав­ли­ва­ем служ­бу. При этом под­ни­мет­ся новый, а теку­щий уда­лит­ся и scale оста­нет­ся на 3-ёх)

Уби­ра­ем нагруз­ку на CPU, что­бы scale упал до 3-ёх. Ждём око­ло 10 минут. Что­бы scale сра­бо­тал быст­рее нуж­но под­клю­чить плат­ный сер­вис - CloudWatch.

Не забы­ва­ем под­чи­щать за собой. Уда­ле­ние абстрак­ции - auto scaling group, уда­ля­ет авто­ма­ти­че­ски создан­ные им инстансы.