Отказоустойчивый сайт с балансировкой нагрузки с помощью Yandex Application Load Balancer
Создайте и настройте веб-сайт с балансировкой нагрузки через Application Load Balancer между тремя зонами доступности, защищенный от сбоев в одной зоне.
- Подготовьте облако к работе.
- Подготовьте сетевую инфраструктуру.
- Создайте группы безопасности.
- Создайте группу ВМ.
- Загрузите файлы веб-сайта.
- Создайте группу бэкендов.
- Создайте HTTP-роутер.
- Создайте L7-балансировщик.
- Настройте DNS.
- Протестируйте отказоустойчивость.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Подготовьте облако к работе
Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- плата за постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование динамического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud);
- плата за балансировку трафика (см. тарифы Yandex Application Load Balancer).
Подготовьте сетевую инфраструктуру
Перед тем, как создавать ВМ:
-
Перейдите в консоль управления Yandex Cloud и выберите каталог, в котором будете выполнять операции.
-
Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности
ru-central1-a
,ru-central1-b
иru-central1-с
. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если нужной сети или подсетей нет, создайте их.
Создайте группы безопасности
Группы безопасности содержат правила, которые разрешают балансировщику получать входящий трафик и отправлять его на ВМ, а ВМ — получать этот трафик.
Чтобы создать группы безопасности для балансировщика и для группы ВМ:
-
В консоли управления откройте сервис Virtual Private Cloud.
-
Откройте вкладку Группы безопасности.
-
Создайте группу безопасности для балансировщика:
-
Нажмите кнопку Создать группу.
-
Введите имя группы, например
alb-sg
. -
Выберите сеть, которой будет назначена группа безопасности.
-
В блоке Правила создайте следующие правила по инструкции под таблицей:
Направление
трафикаОписание Диапазон
портовПротокол Тип источника /
назначенияИсточник /
назначениеИсходящий any Весь Любой CIDR 0.0.0.0/0 Входящий ext-http 80 TCP CIDR 0.0.0.0/0 Входящий ext-https 443 TCP CIDR 0.0.0.0/0 Входящий healthchecks 30080 TCP CIDR 198.18.235.0/24
198.18.248.0/24- Выберите вкладку Исходящий трафик или Входящий трафик.
- Нажмите кнопку Добавить правило.
- В открывшемся окне в поле Диапазон портов укажите один порт или диапазон портов, куда или откуда будет поступать трафик.
- В поле Протокол укажите нужный протокол или оставьте Любой, чтобы разрешить передачу трафика по всем протоколам.
- В поле Назначение или Источник выберите назначение правила:
- CIDR — правило будет применено к диапазону IP-адресов. В поле CIDR блоки укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку Добавить CIDR.
- Группа безопасности — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
- Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.
-
Нажмите кнопку Сохранить.
-
-
Аналогично создайте группу безопасности для группы ВМ с именем
alb-vm-sg
, той же сетью и следующими правилами:Направление
трафикаОписание Диапазон
портовПротокол Тип источника Источник Входящий balancer 80 TCP Группа безопасности alb-sg
Входящий ssh 22 TCP CIDR 0.0.0.0/0
Создайте группу ВМ
На ВМ из целевой группы развертываются бэкенды вашего приложения. Целевая группа будет подключена к балансировщику, чтобы на эндпоинты бэкендов приложения можно было направлять запросы.
Чтобы создать группу ВМ с минимальной конфигурацией:
-
В консоли управления откройте сервис Compute Cloud.
-
Откройте вкладку Группы виртуальных машин и нажмите кнопку Создать группу.
-
В блоке Базовые параметры:
- Введите имя группы ВМ, например
alb-vm-group
. - Выберите сервисный аккаунт из списка или создайте новый. Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, назначьте сервисному аккаунту роль
editor
. По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта.
- Введите имя группы ВМ, например
-
В блоке Распределение выберите три зоны доступности (
ru-central1-a
,ru-central1-b
иru-central1-с
), чтобы обеспечить отказоустойчивость хостинга. -
В блоке Шаблон виртуальной машины нажмите кнопку Задать и укажите конфигурацию базовой ВМ:
- В блоке Базовые параметры введите Описание шаблона.
- В блоке Выбор образа/загрузочного диска откройте вкладку Cloud Marketplace и нажмите кнопку Посмотреть больше. Выберите продукт LEMP и нажмите кнопку Использовать.
- В блоке Диски укажите:
- Тип диска — HDD.
- Размер — 3 ГБ.
- В блоке Вычислительные ресурсы укажите:
- Платформа — Intel Cascade Lake.
- vCPU — 2.
- Гарантированная доля vCPU — 5%.
- RAM — 1 ГБ.
- В блоке Сетевые настройки:
- Выберите облачную сеть и ее подсети.
- В поле Публичный адрес выберите Автоматически.
- Выберите группу безопасности
alb-vm-sg
.
- В блоке Доступ укажите данные для доступа на виртуальную машину:
- В поле Сервисный аккаунт выберите сервисный аккаунт для привязки к ВМ.
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа.
Для подключения по SSH необходимо создать пару ключей. Подробнее в разделе Подключиться к виртуальной машине Linux по SSH.
- Нажмите кнопку Сохранить.
-
В блоке Масштабирование укажите Размер группы ВМ — 3.
-
В блоке Интеграция с Application Load Balancer выберите опцию Создать целевую группу и укажите имя группы:
alb-tg
. -
Нажмите кнопку Создать.
Создание группы ВМ может занять несколько минут. Когда все ВМ перейдут в статус RUNNING
, вы можете загрузить на них файлы веб-сайта.
См. также
Загрузите файлы веб-сайта
Чтобы проверить работу веб-сервера, необходимо загрузить файлы сайта на каждую ВМ. Для примера вы можете использовать файл index.html
из архива.
Для каждой виртуальной машины в созданной группе выполните следующее:
-
На вкладке Виртуальные машины нажмите на имя нужной ВМ в списке. В блоке Сеть найдите публичный IP-адрес.
-
Подключитесь к ВМ по протоколу SSH.
-
Выдайте права на запись для вашего пользователя на директорию
/var/www/html
:sudo chown -R "$USER":www-data /var/www/html
-
Загрузите на ВМ файлы веб-сайта с помощью протокола SCP.
Linux/macOSWindowsИспользуйте утилиту командной строки
scp
:scp -r <путь до директории с файлами> <имя пользователя ВМ>@<IP-адрес виртуальной машины>:/var/www/html
С помощью программы WinSCP скопируйте локальную директорию с файлами в директорию
/var/www/html
на ВМ.
Создайте группу бэкендов
Целевую группу, созданную вместе с группой ВМ, привяжите к группе бэкендов с настройками распределения трафика.
Для бэкендов в группах будут созданы проверки состояния: балансировщик будет периодически отправлять проверочные запросы к ВМ и ожидать ответа в течение определенного периода.
Чтобы создать группу бэкендов:
-
Откройте сервис Application Load Balancer в каталоге, где создана группа ВМ.
-
Откройте вкладку Группы бэкендов.
-
Нажмите кнопку Создать группу бэкендов.
-
Введите имя группы бэкендов, например
alb-bg
. -
В блоке Бэкенды нажмите кнопку Добавить.
-
Введите имя бэкенда, например
backend-1
. -
В поле Целевая группа выберите созданную ранее целевую группу
alb-tg
. -
Укажите Порт, на котором ВМ бэкенда будут принимать входящий трафик от балансировщика:
80
. -
Нажмите кнопку Добавить проверку состояния.
-
Укажите Порт, на котором ВМ бэкенда будут принимать проверочные соединения:
80
. -
Укажите Путь, к которому будет обращаться балансировщик при проверке состояния:
/
. -
Нажмите кнопку Создать.
Создайте HTTP-роутер
Привяжите группу бэкендов к HTTP-роутеру с правилами маршрутизации HTTP-запросов.
Чтобы создать HTTP-роутер и добавить в него маршрут:
-
Откройте вкладку HTTP-роутеры.
-
Нажмите кнопку Создать HTTP-роутер.
-
Введите имя роутера, например
alb-router
. -
Нажмите кнопку Добавить виртуальный хост.
-
Введите имя виртуального хоста, например
alb-host
. -
В поле Authority введите доменное имя сайта:
alb-example.com
. -
Нажмите кнопку Добавить маршрут.
-
Введите имя, например
route-1
. -
В поле Группа бэкендов выберите созданную ранее группу
alb-bg
. -
Остальные настройки оставьте без изменений и нажмите кнопку Создать.
Создайте L7-балансировщик
Чтобы создать балансировщик:
-
Откройте вкладку Балансировщики.
-
Нажмите кнопку Создать L7-балансировщик.
-
Введите имя балансировщика, например
alb-1
. -
В блоке Сетевые настройки выберите сеть, к которой подключена группа ВМ, и созданную ранее группу безопасности
alb-sg
. -
В блоке Размещение выберите подсети для узлов балансировщика в каждой зоне доступности и включите прием трафика.
-
В блоке Обработчики нажмите кнопку Добавить обработчик.
-
Введите имя обработчика, например
alb-listener
. -
В блоке Настройки публичного IP-адреса включите передачу трафика.
-
Укажите порт
80
. -
В поле HTTP-роутер выберите созданный ранее роутер
alb-router
. -
Нажмите кнопку Создать.
Настройте DNS
Доменное имя, которое вы хотите использовать для веб-сайта, нужно связать с IP-адресом балансировщика. Для управления доменом можно использовать сервис Cloud DNS.
В инструкции ниже описана настройка DNS для доменного имени alb-example.com
.
Добавьте зону
-
Откройте сервис Cloud DNS в каталоге, где создана группа ВМ.
-
Нажмите кнопку Создать зону.
-
Задайте настройки зоны:
- Зона:
alb-example.com.
. Укажите ваш зарегистрированный домен. - Тип: Публичная.
- Имя:
alb-zone
.
- Зона:
-
Нажмите кнопку Создать.
Добавьте ресурсные записи
Создайте в публичной зоне записи DNS:
-
Откройте сервис Application Load Balancer. В списке балансировщиков найдите IP-адрес ранее созданного балансировщика
alb-1
. -
В сервисе Cloud DNS выберите зону
alb-example.com.
из списка. -
Создайте запись типа А:
- Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя: оставьте пустым.
- Тип записи: оставьте значение
А
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите публичный адрес балансировщика
alb-1
.
- Нажмите кнопку Создать.
-
Создайте запись типа CNAME:
- Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя:
www
. - Тип записи: выберите значение
CNAME
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите
alb-example.com
.
- Имя:
- Нажмите кнопку Создать.
Протестируйте отказоустойчивость
-
В консоли управления откройте сервис Compute Cloud.
-
Перейдите на страницу ВМ из созданной ранее группы. В блоке Сеть найдите публичный IP-адрес.
-
Подключитесь к ВМ по протоколу SSH.
-
Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:
sudo service nginx stop
-
Подключитесь к вашему веб-сайту через браузер. Несмотря на сбой в работе одного из веб-серверов, подключение должно пройти успешно.
-
После завершения проверки запустите веб-сервис:
sudo service nginx start
Как удалить созданные ресурсы
Чтобы остановить работу хостинга и перестать платить за созданные ресурсы: