Отказоустойчивый сайт с балансировкой нагрузки через Yandex Application Load Balancer с помощью консоли управления
Чтобы создать инфраструктуру для сайта с балансировкой нагрузки в трех зонах доступности с использованием балансировщика Application Load Balancer c помощью консоли управления Yandex Cloud:
- Подготовьте облако к работе.
- Создайте облачную сеть.
- Создайте группы безопасности.
- Создайте группу виртуальных машин.
- Загрузите файлы сайта.
- Создайте группу бэкендов.
- Создайте HTTP-роутер.
- Создайте L7-балансировщик.
- Настройте DNS.
- Протестируйте отказоустойчивость.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- плата за постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование динамического публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud);
- плата за балансировку трафика (см. тарифы Application Load Balancer);
- плата за публичные DNS-запросы и зоны DNS, если вы используете Yandex Cloud DNS (см. тарифы Cloud DNS).
Создайте облачную сеть
Все ресурсы, созданные в сценарии, будут относиться к одной облачной сети.
Чтобы создать сеть:
- В консоли управления
выберите сервис Virtual Private Cloud. - Нажмите кнопку Создать сеть.
- Укажите Имя сети:
mysite-network
. - В поле Дополнительно выберите опцию Создать подсети.
- Нажмите кнопку Создать сеть.
Создайте группы безопасности
Группы безопасности содержат правила, которые разрешают балансировщику получать входящий трафик и отправлять его на ВМ, а ВМ — получать этот трафик.
Чтобы создать группы безопасности для балансировщика и для группы ВМ:
-
В консоли управления
выберите сервис 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
— правило будет применено к диапазону IP-адресов. В поле CIDR блоки укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку Добавить CIDR.Группа безопасности
— правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.Проверки состояния балансировщика
— правило, которое позволяет балансировщику проверять состояние ВМ.
- Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.
-
Нажмите кнопку Сохранить.
-
-
Аналогично создайте группу безопасности для группы ВМ с именем
alb-vm-sg
, той же сетью и следующими правилами:Направление
трафикаОписание Диапазон
портовПротокол Тип источника Источник Входящий
balancer
80
TCP
Группа безопасности
alb-sg
Входящий
ssh
22
TCP
CIDR
0.0.0.0/0
Создайте группу ВМ
На ВМ из целевой группы развертываются бэкенды вашего приложения. Целевая группа будет подключена к балансировщику, чтобы на эндпоинты бэкендов приложения можно было направлять запросы.
Чтобы создать группу ВМ с минимальной конфигурацией:
- В консоли управления
выберите сервис Compute Cloud. - Откройте вкладку Группы виртуальных машин и нажмите кнопку Создать группу виртуальных машин.
- В блоке Базовые параметры:
- Введите имя группы ВМ, например
website-vm-group
. - Выберите сервисный аккаунт из списка или создайте новый. Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, назначьте сервисному аккаунту роль
editor
. По умолчанию все операции с группами безопасности выполняются от имени сервисного аккаунта.
- Введите имя группы ВМ, например
- В блоке Распределение выберите три зоны доступности (
ru-central1-a
,ru-central1-b
иru-central1-d
), чтобы обеспечить отказоустойчивость хостинга. - В блоке Шаблон виртуальной машины нажмите кнопку Задать и укажите шаблон ВМ:
-
В блоке Образ загрузочного диска перейдите на вкладку Marketplace и выберите продукт LEMP и нажмите кнопку Использовать.
-
В блоке Диски и файловые хранилища укажите:
- Тип диска —
HDD
. - Размер —
3 ГБ
.
- Тип диска —
-
В блоке Вычислительные ресурсы укажите:
- Платформа —
Intel Cascade Lake
. - Гарантированная доля vCPU —
5%
. - vCPU —
2
. - RAM —
1 ГБ
.
- Платформа —
-
В блоке Сетевые настройки:
- Выберите облачную сеть и ее подсети.
- В поле Публичный IP-адрес выберите Автоматически.
- Выберите группу безопасности
alb-vm-sg
.
-
В блоке Доступ укажите данные для доступа на ВМ:
- В поле Сервисный аккаунт выберите сервисный аккаунт для привязки к ВМ.
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа.
Для подключения по SSH необходимо создать пару ключей. Подробнее в разделе Подключиться к ВМ Linux по SSH.
-
Нажмите кнопку Сохранить.
-
- В блоке Масштабирование укажите Размер группы ВМ —
3
. - В блоке Интеграция с Application Load Balancer выберите опцию Создать целевую группу и укажите имя группы:
alb-tg
. - Нажмите кнопку Создать.
Создание группы ВМ может занять несколько минут. Когда все ВМ перейдут в статус RUNNING
, вы можете загрузить на них файлы сайта.
Загрузите файлы сайта
Чтобы проверить работу веб-сервера, необходимо загрузить файлы сайта на каждую ВМ. Для примера вы можете использовать файл index.html
из архива
Для каждой ВМ в созданной группе выполните следующее:
-
На вкладке Виртуальные машины нажмите на имя нужной ВМ в списке.
-
Скопируйте Публичный IPv4-адрес из блока Сеть.
-
Подключитесь к ВМ по протоколу 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 в каталоге, где создана группа ВМ.
- Откройте вкладку Группы бэкендов.
- Нажмите кнопку Создать группу бэкендов.
- Введите имя группы бэкендов, например
website-bg
. - В блоке Бэкенды нажмите кнопку Добавить.
- Введите имя бэкенда, например
backend-1
. - В поле *Целевые группы выберите созданную ранее целевую группу
alb-tg
. - Укажите Порт, на котором ВМ бэкенда будут принимать входящий трафик от балансировщика:
80
. - Нажмите кнопку Добавить проверку состояния.
- Укажите Порт, на котором ВМ бэкенда будут принимать проверочные соединения:
80
. - Укажите Путь, к которому будет обращаться балансировщик при проверке состояния:
/
. - Нажмите кнопку Создать.
Создайте HTTP-роутер
Привяжите группу бэкендов к HTTP-роутеру с правилами маршрутизации HTTP-запросов.
Чтобы создать HTTP-роутер и добавить в него маршрут:
- Откройте вкладку HTTP-роутеры.
- Нажмите кнопку Создать HTTP-роутер.
- Введите имя роутера, например
website-router
. - Нажмите кнопку Добавить виртуальный хост.
- Введите имя виртуального хоста, например
alb-host
. - В поле Authority введите доменное имя сайта:
alb-example.com
. - Нажмите кнопку Добавить маршрут.
- Введите имя, например
route-1
. - В поле Группа бэкендов выберите созданную ранее группу
website-bg
. - Остальные настройки оставьте без изменений и нажмите кнопку Создать.
Создайте L7-балансировщик
Чтобы создать балансировщик:
- Откройте вкладку Балансировщики.
- Нажмите кнопку Создать L7-балансировщик.
- Введите имя балансировщика, например
website-alb
. - В блоке Сетевые настройки выберите сеть, к которой подключена группа ВМ, и созданную ранее группу безопасности
alb-sg
. - В блоке Размещение выберите подсети для узлов балансировщика в каждой зоне доступности и включите прием трафика.
- В блоке Обработчики нажмите кнопку Добавить обработчик.
- Введите имя обработчика, например
alb-listener
. - В блоке Публичный IP-адрес включите передачу трафика.
- Укажите порт
80
. - В поле HTTP-роутер выберите созданный ранее роутер
website-router
. - Нажмите кнопку Создать.
Настройте DNS
Доменное имя alb-example.com
, которое вы хотите использовать для сайта, нужно связать с IP-адресом балансировщика с помощью записей DNS:
-
В консоли управления
выберите сервис Application Load Balancer. -
Скопируйте IP-адрес созданного балансировщика.
-
На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.
-
Создайте или измените A-запись и CNAME-запись для
alb-example.com
:alb-example.com. A <IP-адрес_L7-балансировщика> alb-example.com. CNAME
Если вы пользуетесь Yandex Cloud DNS, настройте записи по следующей инструкции:
Инструкция по настройке DNS-записей для Cloud DNS
Чтобы получить доступ к именам из публичной зоны, вам нужно делегировать домен. Укажите адреса серверов
ns1.yandexcloud.net
иns2.yandexcloud.net
в личном кабинете вашего регистратора.- В консоли управления
выберите сервис Cloud DNS. - Если у вас нет публичной зоны DNS, создайте ее:
- Нажмите кнопку Создать зону.
- Укажите Имя зоны:
alb-zone
. - В поле Зона укажите доменное имя сайта с точкой в конце:
alb-example.com.
- Выберите Тип зоны —
Публичная
. - Нажмите кнопку Создать.
- Создайте А-запись в зоне:
- Нажмите кнопку Создать запись.
- Имя: оставьте пустым.
- Тип: оставьте значение
А
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите публичный IP-адрес балансировщика
website-alb
. - Нажмите кнопку Создать.
- Создайте CNAME-запись:
- Нажмите кнопку Создать запись.
- Имя:
www
. - Тип: выберите значение
CNAME
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите
alb-example.com
. - Нажмите кнопку Создать.
- В консоли управления
Протестируйте отказоустойчивость
-
В консоли управления
выберите сервис Compute Cloud. -
Перейдите на страницу ВМ из созданной ранее группы.
-
Скопируйте Публичный IPv4-адрес из блока Сеть.
-
Подключитесь к ВМ по протоколу SSH.
-
Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:
sudo service nginx stop
-
Откройте ваш сайт в браузере. Несмотря на сбой в работе одного из веб-серверов, сайт должен успешно открыться.
-
После завершения проверки запустите веб-сервис:
sudo service nginx start
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите нетарифицируемые ресурсы, которые блокируют удаление тарифицируемых ресурсов:
- Удалите группу ВМ
website-vm-group
. - Если вы использовали Yandex Cloud DNS, то удалите DNS-записи и удалите DNS-зону.