Отказоустойчивый сайт с балансировкой нагрузки с помощью Yandex Network Load Balancer
Создайте и настройте веб-сайт на стеке LAMP (Linux, Apache HTTP Server, MySQL, PHP) или LEMP (веб-сервер Apache заменяется на Nginx) с балансировкой нагрузки через Network Load Balancer между двумя зонами доступности, защищенный от сбоев в одной зоне.
- Подготовьте облако к работе.
- Подготовьте сетевую инфраструктуру.
- Создайте группу ВМ.
- Загрузите файлы веб-сайта.
- Создайте сетевой балансировщик.
- Протестируйте отказоустойчивость.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Также инфраструктуру для размещения в группе виртуальных машин отказоустойчивого сайта с балансировкой нагрузки можно развернуть через Terraform с помощью готового файла конфигурации.
Подготовьте облако к работе
Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки веб-сайта входит:
- плата за диски и постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
- плата за использование динамических внешних IP-адресов (см. тарифы Yandex Virtual Private Cloud);
- плата за сетевые балансировщики и балансировку трафика (см. тарифы Yandex Network Load Balancer).
Подготовьте сетевую инфраструктуру
Перед тем, как создавать ВМ:
-
Перейдите в консоль управления Yandex Cloud и выберите каталог, в котором будете выполнять операции.
-
Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности
ru-central1-a
иru-central1-b
. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если нужной сети или подсетей нет, создайте их.
Создайте группу ВМ
Чтобы создать группу ВМ с предустановленным веб-сервером:
-
В консоли управления выберите сервис Compute Cloud.
-
Откройте вкладку Группы виртуальных машин и нажмите кнопку Создать группу.
-
В блоке Базовые параметры:
- Введите имя группы ВМ, например
nlb-vm-group
. - Выберите сервисный аккаунт из списка или создайте новый. Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, назначьте сервисному аккаунту роль
editor
. По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта.
- Введите имя группы ВМ, например
-
В блоке Распределение выберите зоны доступности
ru-central1-a
иru-central1-b
, чтобы обеспечить отказоустойчивость хостинга. -
В блоке Шаблон виртуальной машины нажмите кнопку Задать и укажите конфигурацию базовой ВМ:
-
В блоке Базовые параметры введите Описание шаблона.
-
В блоке Выбор образа/загрузочного диска откройте вкладку Cloud Marketplace и нажмите кнопку Посмотреть больше. Выберите продукт:
Нажмите кнопку Использовать.
-
В блоке Диски укажите:
- Тип диска — HDD.
- Размер — 3 ГБ.
-
В блоке Вычислительные ресурсы укажите:
- Платформа — Intel Ice Lake.
- vCPU — 2.
- Гарантированная доля vCPU — 20%.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки:
- Выберите облачную сеть и ее подсети.
- В поле Публичный адрес выберите Автоматически.
-
В блоке Доступ укажите данные для доступа на виртуальную машину:
- В поле Сервисный аккаунт выберите сервисный аккаунт для привязки к ВМ.
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа.
Для подключения по SSH необходимо создать пару ключей. Подробнее в разделе Создание пары ключей SSH.
-
Нажмите кнопку Сохранить.
-
-
В блоке Масштабирование укажите Размер группы ВМ — 2.
-
В блоке Интеграция с Load Balancer выберите опцию Создать целевую группу и укажите имя группы:
nlb-tg
. -
Нажмите кнопку Создать.
Создание группы ВМ может занять несколько минут. Когда все ВМ перейдут в статус RUNNING
, вы можете загрузить на них файлы веб-сайта.
См. раздел Как создать инфраструктуру с помощью Terraform.
См. также
Загрузите файлы веб-сайта
Чтобы проверить работу веб-сервера, необходимо загрузить файлы сайта на каждую ВМ. Для примера вы можете использовать файл 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
на ВМ.
Создайте сетевой балансировщик
При создании сетевого балансировщика нужно добавить обработчик, на котором балансировщик будет принимать трафик, подключить целевую группу, созданную вместе с группой ВМ, и настроить в ней проверку состояния ресурсов.
Чтобы создать сетевой балансировщик:
-
В консоли управления откройте раздел Network Load Balancer.
-
Нажмите кнопку Создать сетевой балансировщик.
-
Задайте имя балансировщика, например
nlb-1
. -
В блоке Обработчики нажмите кнопку Добавить обработчик и укажите параметры:
- Имя обработчика —
nlb-listener
. - Порт —
80
. - Целевой порт —
80
.
- Имя обработчика —
-
Нажмите кнопку Добавить.
-
В блоке Целевые группы:
- Нажмите кнопку Добавить целевую группу и выберите созданную ранее целевую группу
nlb-tg
. Если группа одна, она будет выбрана автоматически. - В блоке Проверка состояния нажмите кнопку Настроить и измените параметры:
- Имя проверки —
health-check-1
. - Порог работоспособности — количество успешных проверок, после которого виртуальная машина будет считаться готовой к приему трафика:
5
. - Порог неработоспособности — количество проваленных проверок, после которого на виртуальную машину перестанет подаваться трафик:
5
.
- Имя проверки —
- Нажмите кнопку Применить.
- Нажмите кнопку Добавить целевую группу и выберите созданную ранее целевую группу
-
Нажмите кнопку Создать.
См. раздел Как создать инфраструктуру с помощью Terraform.
Протестируйте отказоустойчивость
-
В консоли управления выберите сервис Compute Cloud.
-
Перейдите на страницу ВМ из созданной ранее группы. В блоке Сеть найдите публичный IP-адрес.
-
Подключитесь к ВМ по протоколу SSH.
-
Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:
LAMPLEMPsudo service apache2 stop
sudo service nginx stop
-
Перейдите в раздел Network Load Balancer и выберите созданный ранее балансировщик
nlb-1
. -
В блоке Обработчики найдите IP-адрес обработчика. Откройте сайт в браузере, используя адрес обработчика.
Несмотря на сбой в работе одного из веб-серверов, подключение должно пройти успешно.
-
После завершения проверки снова запустите веб-сервис:
LAMPLEMPsudo service apache2 start
sudo service nginx start
Как удалить созданные ресурсы
Чтобы остановить работу хостинга и перестать платить за созданные ресурсы:
Как создать инфраструктуру с помощью Terraform
Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Mozilla Public License.
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Чтобы разместить в группе виртуальных машин отказоустойчивый сайт с балансировкой нагрузки с помощью Terraform:
-
Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файлы с описанием инфраструктуры:
Готовый архивСоздание вручную- Создайте папку для файлов.
- Скачайте архив (2 КБ).
- Разархивируйте архив в папку. В результате в ней появится конфигурационный файл
load-balancer.tf
.
-
Создайте папку для файлов.
-
Создайте в папке конфигурационный файл
load-balancer.tf
:load-balancer.tfterraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = ">= 0.47.0" } } } provider "yandex" { zone = "ru-central1-a" } variable "folder_id" { description = "Yandex.Cloud Folder ID where resources will be created" default = "<идентификатор_каталога>" } resource "yandex_iam_service_account" "ig-sa" { name = "ig-sa" } resource "yandex_resourcemanager_folder_iam_member" "editor" { folder_id = var.folder_id role = "editor" member = "serviceAccount:${yandex_iam_service_account.ig-sa.id}" ] } resource "yandex_compute_instance_group" "ig-1" { name = "nlb-vm-group" folder_id = var.folder_id service_account_id = "${yandex_iam_service_account.ig-sa.id}" instance_template { platform_id = "standard-v3" resources { core_fraction = 20 memory = 1 cores = 2 } boot_disk { mode = "READ_WRITE" initialize_params { image_id = "<идентификатор_образа>" type = "network-hdd" size = 3 } } network_interface { network_id = "${yandex_vpc_network.network-1.id}" subnet_ids = ["${yandex_vpc_subnet.subnet-1.id}","${yandex_vpc_subnet.subnet-2.id}" ] nat = true } metadata = { user-data = "#cloud-config\nusers:\n - name: <имя_пользователя>\n groups: sudo\n shell: /bin/bash\n sudo: ['ALL=(ALL) NOPASSWD:ALL']\n ssh-authorized-keys:\n - ${file("<путь_к_открытому_SSH-ключу>")}" } } scale_policy { fixed_scale { size = 2 } } allocation_policy { zones = ["ru-central1-a", "ru-central1-b"] } deploy_policy { max_unavailable = 1 max_expansion = 0 } load_balancer { target_group_name = "nlb-tg" } } resource "yandex_lb_network_load_balancer" "foo" { name = "nlb-1" listener { name = "nlb-listener" port = 80 } attached_target_group { target_group_id = "${yandex_compute_instance_group.ig-1.load_balancer.0.target_group_id}" healthcheck { name = "health-check-1" unhealthy_threshold = 5 healthy_threshold = 5 http_options { port = 80 } } } } resource "yandex_vpc_network" "network-1" { name = "network1" } resource "yandex_vpc_subnet" "subnet-1" { name = "subnet1" zone = "ru-central1-a" network_id = "${yandex_vpc_network.network-1.id}" v4_cidr_blocks = ["192.168.1.0/24"] } resource "yandex_vpc_subnet" "subnet-2" { name = "subnet2" zone = "ru-central1-b" network_id = "${yandex_vpc_network.network-1.id}" v4_cidr_blocks = ["192.168.2.0/24"] }
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
-
В блоке
variable
укажите значение переменнойfolder_id
— идентификатор каталога, в котором создаются необходимые ресурсы. -
В блоке
metadata
укажите метаданные для создания виртуальной машины и содержимое SSH-ключа. Ключ указывается в формате<любое_имя>:<содержимое_SSH-ключа>
. Указанное имя пользователя не играет роли, ключ будет присвоен пользователю, который задан в конфигурации образа LAMP (LEMP). В разных образах это разные пользователи. Подробнее см. в разделе Ключи, обрабатываемые в публичных образах. -
В блоке
boot_disk
укажите идентификатор одного из образов ВМ с нужным набором компонентов: -
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-