Отказоустойчивый сайт с балансировкой нагрузки с помощью Yandex Network Load Balancer
В этом сценарии описано, как настроить веб-сайт на стеке LAMP (Linux, Apache, MySQL, PHP) или LEMP (Linux, nginx, MySQL, PHP) с балансировкой нагрузки через Yandex Network Load Balancer между двумя зонами доступности, защищенный от сбоев в одной зоне.
Чтобы настроить отказоустойчивый веб-сайт с балансировкой нагрузки:
- Подготовьте облако к работе.
- Создайте виртуальные машины с предустановленным веб-сервером.
- Загрузите файлы веб-сайта.
- Создайте целевую группу.
- Создайте сетевой балансировщик.
- Протестируйте отказоустойчивость.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Подготовьте облако к работе
Перед тем, как разворачивать сервер, нужно зарегистрироваться в Yandex.Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex.Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша виртуальная машина, на странице облака.
Подробнее об облаках и каталогах.
Убедитесь, что в вашем каталоге есть сеть с подсетями в зонах доступности ru-cental1-a
и ru-central1-b
. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если нужной сети или подсетей нет, создайте их.
Необходимые платные ресурсы
В стоимость поддержки веб-сайта входит:
- плата за диски и постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
- плата за использование динамических внешних IP-адресов (см. тарифы Yandex Virtual Private Cloud);
- плата за сетевые балансировщики и балансировку трафика (см. тарифы Yandex Network Load Balancer).
Создайте виртуальные машины
Виртуальные машины должны быть созданы из одинаковых образов и их характеристики должны совпадать.
Создайте первую виртуальную машину с предустановленным веб-сервером
Создайте виртуальную машину:
-
На странице каталога нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины:
lb-tutorial-web-ru-central1-a
. -
Выберите зону доступности:
ru-central1-a
. -
Выберите один публичный образ для обеих виртуальных машин:
- LEMP для Linux, nginx, MySQL, PHP;
- LAMP для Linux, Apache, MySQL, PHP.
-
В блоке Вычислительные ресурсы:
- Платформа — Intel Cascade Lake.
- vCPU — 2.
- Гарантированная доля vCPU — 5%.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.
-
В поле Публичный адрес выберите Автоматически.
-
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты
ssh-keygen
в Linux и macOS или PuTTYgen в Windows.
-
Нажмите кнопку Создать ВМ.
Создайте вторую виртуальную машину с предустановленным веб-сервером
Создайте вторую виртуальную машину:
-
На странице каталога нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины:
lb-tutorial-web-ru-central1-b
. -
Выберите зону доступности:
ru-central1-b
. -
Выберите один публичный образ для обеих виртуальных машин:
- LEMP для Linux, nginx, MySQL, PHP;
- LAMP для Linux, Apache, MySQL, PHP.
-
В блоке Вычислительные ресурсы:
- Платформа — Intel Cascade Lake.
- vCPU — 2.
- Гарантированная доля vCPU — 5%.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.
-
В поле Публичный адрес выберите Автоматически.
-
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты
ssh-keygen
в Linux и macOS или PuTTYgen в Windows.
-
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING
, вы можете загрузить на нее файлы веб-сайта.
При создании виртуальным машинам назначатся публичные IP-адреса. Их можно использовать для доступа по SSH.
Загрузите файлы веб-сайта
Для примера вы можете создать тестовый файл index.html
с любым текстом.
Для виртуальных машин lb-tutorial-web-ru-central1-a
и lb-tutorial-web-ru-central1-b
выполните следующее:
-
В консоли управления перейдите в раздел Compute Cloud и найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH.
-
Выдайте права на запись для вашего пользователя на директорию
/var/www/html
:$ sudo chown -R "$USER":www-data /var/www/html
-
Загрузите на виртуальную машину файлы веб-сайта с помощью протокола SCP.
Linux/macOSWindows$ scp -r <путь до директории с файлами> <имя пользователя ВМ>@<IP-адрес виртуальной машины>:/var/www/html
С помощью программы WinSCP скопируйте локальную директорию с файлами в директорию
/var/www/html
на виртуальной машине.
Создайте целевую группу
- Откройте раздел Load Balancer в каталоге, где созданы ВМ.
- Откройте вкладку Целевые группы.
- Нажмите кнопку Создать целевую группу.
- Введите имя целевой группы, например
lb-tg-tutorial-web
. - Отметьте виртуальные машины
lb-tutorial-web-ru-central1-a
иlb-tutorial-web-ru-central1-b
для добавления в целевую группу. - Нажмите кнопку Создать целевую группу.
Создайте сетевой балансировщик
При создании сетевого балансировщика нужно создать обработчик, на котором балансировщик будет принимать трафик, а также настроить проверку состояния ресурсов в подключенной целевой группе.
Чтобы создать сетевой балансировщик:
- Откройте вкладку Балансировщики.
- Нажмите кнопку Создать балансировщик.
- Задайте имя балансировщика, например
lb-tutorial-web
. - В блоке Обработчики нажмите кнопку Добавить обработчик.
- В открывшемся окне введите имя обработчика, например
lb-tut-listener-1
. - Укажите порт
80
. - Нажмите кнопку Добавить.
- Нажмите переключатель Целевые группы.
- Выберите созданную ранее целевую группу
lb-tg-tutorial-web
. Если группа одна, она будет выбрана автоматически. - В блоке Проверка состояния введите имя проверки состояния, например
health-check-1
. - Выберите тип проверки: HTTP.
- Укажите порт
80
. - Укажите URL, по которому будут выполняться проверки. Можно оставить путь по умолчанию —
/
. - Укажите время ожидания ответа в секундах:
1
. - Укажите интервал отправки проверок состояния в секундах:
2
. - Укажите порог работоспособности — количество успешных проверок, после которого виртуальная машина будет считаться готовой к приему трафика:
5
. - Укажите порог неработоспособности — количество проваленных проверок, после которого на виртуальную машину перестанет подаваться трафик:
5
. - Нажмите кнопку Создать балансировщик.
Протестируйте отказоустойчивость
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины
lb-tutorial-web-ru-central1-a
. -
Подключитесь к виртуальной машине по протоколу SSH.
-
Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:
LAMPLEMP$ sudo service apache2 stop
$ sudo service nginx stop
-
В консоли управления перейдите в раздел Network Load Balancer и выберите созданный ранее балансировщик.
-
В блоке Обработчики найдите IP-адрес обработчика. Откройте сайт в браузере, используя адрес обработчика. Несмотря на сбой в работе одного из веб-серверов, подключение должно пройти успешно.
-
После завершения проверки снова запустите веб-сервис:
LAMPLEMP$ sudo service apache2 start
$ sudo service nginx start
Как удалить созданные ресурсы
Чтобы перестать платить за развернутые серверы, достаточно удалить созданные виртуальные машины dns-lb-tutorial-web-ru-central1-a
и dns-lb-tutorial-web-ru-central1-b
и балансировщик lb-tutorial-web
.