Рубрики
Uncategorized

Создайте высокодоступные приложение Node.js, используя Docker, Nginx и AWS ELB

Что такое балансировка нагрузки? Балансировка нагрузки — это техника (алгоритм), используемая для распределения Incomi … Помечено с AWS, DEVOPS, Docker, Nginx.

Балансировка нагрузки — это техника (алгоритм), используемая для распределения входящего сетевого трафика на группу серверов. Он предоставляет единую точку входа для всех пользователей общедоступных для обслуживания, размещенной сервером. Серверы производственно-классов, как правило, работают за балансировщиками нагрузки, потому что они могут « даже out-out » входящая нагрузка по серверам, предотвращая тем самым перегрузки серверов. Балансировщики нагрузки также обеспечивают вторичную функциональность серверам, которые они являются трафиком маршрутизации: они действуют как Обратный прокси Отказ Обратный прокси похож на средний человек между группой серверов и пользователей. Все запросы обрабатываются обратным прокси-прокси, пересылаются на соответствующий сервер на основе условий запроса. Затем сервер ответит со своими данными, которые затем направлены пользователям из обратного прокси. Таким образом, R-Proxies сохраняют идентичность серверов Anonymous наряду с предотвращением доступа к основным серверам, где хранятся конфиденциальные данные, такие как файлы конфигурации, токены, секреты и т. Д.

NGINX — это быстрый и бесплатный балансировщик нагрузки с открытым исходным кодом, который также может действовать как обратный прокси. С другой стороны, ELB — это уравновешивание нагрузки, предоставляется Amazon AWS. ELB может дополнительно иметь 3 основных типа: (1) ALB, (2) CLB и (3) NLB. Более новый класс нагрузочных балансировщиков под названием Gateway Load-Balancers также добавлял в семью облачных услуг AWS. Идея этого урока состоит в том, чтобы сформировать каскадную мультигрупповую архитектуру балансировщики, которая может обеспечить высокодоступный сервер Node.js, работающий на нескольких портах.

Примечание для пользователей : Существует множество способов реализации инфраструктуры для приложений Node.js на AWS, в том числе в том, что использует собственные ECS AWS и ECR ECR для приложений Docker. Тем не менее, этот учебник не сосредоточен на этом, и стремится лучше понять механизм индейцев EC2, балансировщиков нагрузки и как они взаимодействуют с Docker над сбалансированными нагрузками и проксифицированными портами.

Это архитектура, на которую мы стремимся. Многоуровневые балансировщики нагрузки, управляемые AWS и NGINX, которые помогут нам поддерживать несколько портов на каждом экземпляре EC2 для наших приложений узла. Хорошо об этой архитектуре заключается в том, что 2 экземпляра находятся в разных зонах доступности (AZ1 и AZ2), в результате, даже если одна зона снижается, другая зона остается функциональной. И наше приложение не хватает.

Ради простоты мы используем стандартное приложение Starter Express Usde, которое выглядит так:

Порты предоставляются в Экспресс-приложение через Порт Переменная среды. Мы будем кормить эти значения порта через Docker. Это очень простая задача благодаря Docker-Compose Отказ Есть другая вариабельная среда Server_id. Однако не волнуйтесь, так как только для демонстрационных целей только. Как только вся эта установка готова, Server_id Дайте нам знать, какой сервер балансировщики нагрузки натягивают ответ. Это поможет нам подтвердить, что наша конфигурация инфраструктуры с использованием многоуровневой нагрузки-балансировщика/R-прокси работает так, как он должен быть.

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

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

  1. С помощью приборной панели нажмите Запустить экземпляры в правом верхнем углу.
  2. Из раздела быстрого запуска выберите Amazon Linux 2 AMI Отказ
  3. Выберите тип экземпляра T2.Micro. (Вы можете воспользоваться бесплатным типом на этот экземпляр, если он все еще доступен на вашей учетной записи). Вы также можете выбрать любой другой тип, который вам нравится.
  4. Для этой демонстрации только мы запустим 2 экземпляра отдельно, поскольку мы хотим эти два экземпляра в разных зонах доступности. В моем случае этот регион US-East-1 поэтому я выбрал подсеть по умолчанию под США-восток-1А Отказ
  5. Под Пользовательские данные Раздел, вставьте код из этого скрипта ниже. Это установит предварительное программное обеспечение для запуска нашего Node.js Docker Apps.

  6. Для Добавить хранение и Добавить теги Разделы, сохраняйте значения по умолчанию и пропустить.

  7. Для Настроить группу безопасности Создайте новую группу безопасности с портами 22 (SSH) и 80 (HTTP) Open. Для диапазона IP вы можете выбрать Где угодно или Мой IP * 8. Поскольку это только для тестирования, вы можете выбрать один из них. Я пошел с ** где угодно Отказ

  8. Нажмите Отзыв и запустить а потом Запуск Отказ

  9. Создайте новую ключевую пару в SSH в эти экземпляры. Нам понадобится позже, чтобы построить изображения Docker для приложения и внутреннего балансировщика нагрузки.

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

Для этого учебника мы будем использовать это репо для приложения:

Link: https://github.com/sowmenappd/load_balanced_nodejs_app

Это поможет нам ускорить процесс. Иерархический вид репо приведен ниже:

приложение Папка содержит исходный код сервера узла вместе с DockerFile. В nginx Папка, есть файл конфигурации nginx.conf Это определяет конфигурацию порта сервера восходящего сервера:

http{    
    upstream lb {        
        server 172.17.0.1:1000 weight=1;        
        server 172.17.0.1:2000 weight=1;        
        server 172.17.0.1:3000 weight=1;    
    }     
    server {        
        listen 80;        
        location / {            
            proxy_pass http://lb;        
        }    
    }
}

Файлы конфигурации E Указывает, что основной сервер Nginx должен прослушивать порт 80, корневое место «/» будет реле запроса (прокси-прокси) на вышестерку, определенное в этом файле с именем фунт . Это объект вверх по течению, который указывает, сколько будет включено в сервера (это экспресс-серверы, которые мы устанавливаем через Docker-Copose, больше на что в более позднем разделе), и какие порты эти серверы будут внутренне работать, в то время как обратный Прокси нагрузка баланс трафика из порта 80. В нашем случае восходящий прокси будет прямым движением к порту 1000, 2000 и 3000. Эти номера порта должны соответствовать внутреннему значению порта, которое отправляется на каждый экземпляр экспресс-сервера в виде Env-Var, который мы определимся в файле Docker-Compose Yaml. Для каждого из запущенных экземпляров мы выполняем следующее:

  • SSH в экземпляр с использованием созданной KeyPair
  • Запустите следующие команды терминала, чтобы создать изображение приложений с его DockerFile
git clone https://github.com/sowmenappd/load_balanced_nodejs_app.git
cd load_balanced_nodejs_app/app
docker build -t app .
  • Далее Создайте изображение Docker Neginx Server
cd ../nginx
docker build -t nginx-s .
  • Беги Docker Images И вы должны увидеть что-то вроде этого:
  • Для второго сервера нам нужно изменить файл docker-compose.yml. Env-var Server_id Следует изменяться на 2 для всех приложений (App1, App2, App3). Это определенно нечего беспокоиться о том, и ни один производственный сервер никогда не будет иметь что-то подобное. Мы делаем это только ради демонстрации.

  • Запустите последние команды:

cd ..
docker-compose up -d

Ваши изолированные серверы теперь должны работать три процесса экспресс-приложения на заднем плане. Все, что нам нужно сейчас, состоит в том, чтобы установить эту систему, используя AWS Balancer AWS, AWS Alb.

На данный момент оба экземпляра готовы к монтажу. Мы собираемся настроить балансировщик нагрузки на приложение в AWS, следуя этим этапам:

  1. Перейдите к Приборная панель EC2 и нажмите на Целевые группы Отказ Нажмите Создать целевую группу Отказ
  2. Выберите Тип цели: Экземпляры и предоставить действительное имя целевой группы и нажмите Следующий Отказ
  3. Выберите два объекта выполнения и нажмите Включить как ожидание ниже , с портом как 80.
  4. Нажмите Создать целевую группу Отказ
  5. Далее нажмите на Балансировщик нагрузки из бокового меню (слева).
  6. Нажмите Создать балансировщик нагрузки и нажмите Создать На карточке балансировщика нагрузки на нагрузку.
  7. На следующем экране выберите зоны доступности, которые вы выбрали ранее при запуске экземпляров и продолжите.
  8. Создайте новую группу безопасности с портом 80 Открыть для всех IP-диапазона, а затем нажмите Следующий Отказ
  9. Выберите Существующая целевая группа И укажите его на целевую группу, которую вы создали.
  10. Остальные настройки в порядке, вы можете нажать на Создать Отказ

Балансировщик нагрузки должен быть введен в систему и работает в течение нескольких минут после регистрации экземпляров и запущении проверки здоровья. Теперь мы снимаем DNS-имя балансировщика нагрузки от Dashboard EC2> Балансировщики нагрузки Скопируйте атрибут имени DNS балансировщика нагрузки.

Вставьте имя DNS в браузер и нажмите Enter. Вы увидите, что каждый раз, когда вы обновляете страницу браузера, ответ отправляет обратно разные значения порта и сервера_id. Это подтверждает систему, по умолчанию, по умолчанию, балансировщики NGINX и AWS используют круглый алгоритм Robin для балансировки нагрузки.

Наша система теперь гарантирована очень высокой доступной и способной выдерживать Spiky и огромное количество трафика над длительными продолжительностью эксплуатации, учитывая конфигурацию Multi-Laad Balancer, которую мы развернули. В качестве следующего в этом учебном пособии я также опубликую другую статью, показывающую, как создать и поддерживать трубопровод развертывания, который интегрируется с контролем источника и развертывает наши изменения серверам после коммуникаций на репо Github.

Оригинал: «https://dev.to/sowmenappd/build-a-highly-available-node-js-application-using-docker-nginx-and-aws-elb-3cjp»