Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
    • Все руководства
    • Статический сайт в Object Storage
    • Сайт на LAMP- или LEMP-стеке
    • Отказоустойчивый сайт с балансировкой нагрузки с помощью Network Load Balancer
    • Отказоустойчивый сайт с балансировкой нагрузки с помощью Application Load Balancer
    • Сайт на базе Joomla с БД PostgreSQL
    • Создание сайта на WordPress
    • Сайт на WordPress с БД MySQL
    • Перенос WordPress сайта с хостинга в Yandex Cloud
    • Сайт на базе 1С-Битрикс
    • Организация виртуального хостинга
    • Создание балансировщика с защитой от DDoS
    • Публикация обновлений для игр с помощью Cloud CDN
    • Интеграция L7-балансировщика с Cloud CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Терминирование TLS-соединений
  • Интернет-магазины
  • Хранение и восстановление данных
  • Тестовая среда
  • Управление инфраструктурой
  • Построение Data Platform
  • Продукты Microsoft в Yandex Cloud
  • Сетевая инфраструктура
  • Визуализация и анализ данных
  • Интернет вещей
  • Бессерверные технологии
  1. Веб-сервис
  2. Отказоустойчивый сайт с балансировкой нагрузки с помощью Network Load Balancer

Отказоустойчивый сайт с балансировкой нагрузки с помощью Yandex Network Load Balancer

Статья создана
Yandex Cloud
,
улучшена
dahnlka
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Подготовьте сетевую инфраструктуру
  • Создайте группу ВМ
  • Загрузите файлы веб-сайта
  • Создайте сетевой балансировщик
  • Протестируйте отказоустойчивость
  • Как удалить созданные ресурсы
  • Как создать инфраструктуру с помощью Terraform

Создайте и настройте веб-сайт на стеке LAMP (Linux, Apache HTTP Server, MySQL, PHP) или LEMP (веб-сервер Apache заменяется на Nginx) с балансировкой нагрузки через Network Load Balancer между двумя зонами доступности, защищенный от сбоев в одной зоне.

  1. Подготовьте облако к работе.
  2. Подготовьте сетевую инфраструктуру.
  3. Создайте группу ВМ.
  4. Загрузите файлы веб-сайта.
  5. Создайте сетевой балансировщик.
  6. Протестируйте отказоустойчивость.

Если сайт вам больше не нужен, удалите все используемые им ресурсы.

Также инфраструктуру для размещения в группе виртуальных машин отказоустойчивого сайта с балансировкой нагрузки можно развернуть через Terraform с помощью готового файла конфигурации.

Подготовьте облако к работе

Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсы

В стоимость поддержки веб-сайта входит:

  • плата за диски и постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
  • плата за использование динамических внешних IP-адресов (см. тарифы Yandex Virtual Private Cloud);
  • плата за сетевые балансировщики и балансировку трафика (см. тарифы Yandex Network Load Balancer).

Подготовьте сетевую инфраструктуру

Перед тем, как создавать ВМ:

  1. Перейдите в консоль управления Yandex Cloud и выберите каталог, в котором будете выполнять операции.

  2. Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности ru-central1-a и ru-central1-b. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если нужной сети или подсетей нет, создайте их.

Создайте группу ВМ

Чтобы создать группу ВМ с предустановленным веб-сервером:

Консоль управления
Terraform
  1. В консоли управления выберите сервис Compute Cloud.

  2. Откройте вкладку Группы виртуальных машин и нажмите кнопку Создать группу.

  3. В блоке Базовые параметры:

    • Введите имя группы ВМ, например nlb-vm-group.
    • Выберите сервисный аккаунт из списка или создайте новый. Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, назначьте сервисному аккаунту роль editor. По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта.
  4. В блоке Распределение выберите зоны доступности ru-central1-a и ru-central1-b, чтобы обеспечить отказоустойчивость хостинга.

  5. В блоке Шаблон виртуальной машины нажмите кнопку Задать и укажите конфигурацию базовой ВМ:

    • В блоке Базовые параметры введите Описание шаблона.

    • В блоке Выбор образа/загрузочного диска откройте вкладку Cloud Marketplace и нажмите кнопку Посмотреть больше. Выберите продукт:

      • LEMP для Linux, nginx, MySQL, PHP;
      • LAMP для Linux, Apache, MySQL, PHP.

      Нажмите кнопку Использовать.

    • В блоке Диски укажите:

      • Тип диска — HDD.
      • Размер — 3 ГБ.
    • В блоке Вычислительные ресурсы укажите:

      • Платформа — Intel Ice Lake.
      • vCPU — 2.
      • Гарантированная доля vCPU — 20%.
      • RAM — 1 ГБ.
    • В блоке Сетевые настройки:

      • Выберите облачную сеть и ее подсети.
      • В поле Публичный адрес выберите Автоматически.
    • В блоке Доступ укажите данные для доступа на виртуальную машину:

      • В поле Сервисный аккаунт выберите сервисный аккаунт для привязки к ВМ.
      • В поле Логин введите имя пользователя.
      • В поле SSH-ключ вставьте содержимое файла открытого ключа.
        Для подключения по SSH необходимо создать пару ключей. Подробнее в разделе Создание пары ключей SSH.
    • Нажмите кнопку Сохранить.

  6. В блоке Масштабирование укажите Размер группы ВМ — 2.

  7. В блоке Интеграция с Load Balancer выберите опцию Создать целевую группу и укажите имя группы: nlb-tg.

  8. Нажмите кнопку Создать.

Создание группы ВМ может занять несколько минут. Когда все ВМ перейдут в статус RUNNING, вы можете загрузить на них файлы веб-сайта.

См. раздел Как создать инфраструктуру с помощью Terraform.

См. также

  • Подключиться к виртуальной машине Linux по SSH

Загрузите файлы веб-сайта

Чтобы проверить работу веб-сервера, необходимо загрузить файлы сайта на каждую ВМ. Для примера вы можете использовать файл index.html из архива.

Для каждой виртуальной машины в созданной группе выполните следующее:

  1. На вкладке Виртуальные машины нажмите на имя нужной ВМ в списке. В блоке Сеть найдите публичный IP-адрес.

  2. Подключитесь к ВМ по протоколу SSH.

  3. Выдайте права на запись для вашего пользователя на директорию /var/www/html:

    sudo chown -R "$USER":www-data /var/www/html
    
  4. Загрузите на ВМ файлы веб-сайта с помощью протокола SCP.

    Linux/macOS
    Windows

    Используйте утилиту командной строки scp:

    scp -r <путь до директории с файлами> <имя пользователя ВМ>@<IP-адрес виртуальной машины>:/var/www/html
    

    С помощью программы WinSCP скопируйте локальную директорию с файлами в директорию /var/www/html на ВМ.

Создайте сетевой балансировщик

При создании сетевого балансировщика нужно добавить обработчик, на котором балансировщик будет принимать трафик, подключить целевую группу, созданную вместе с группой ВМ, и настроить в ней проверку состояния ресурсов.

Чтобы создать сетевой балансировщик:

Консоль управления
Terraform
  1. В консоли управления откройте раздел Network Load Balancer.

  2. Нажмите кнопку Создать сетевой балансировщик.

  3. Задайте имя балансировщика, например nlb-1.

  4. В блоке Обработчики нажмите кнопку Добавить обработчик и укажите параметры:

    • Имя обработчика — nlb-listener.
    • Порт — 80.
    • Целевой порт — 80.
  5. Нажмите кнопку Добавить.

  6. В блоке Целевые группы:

    1. Нажмите кнопку Добавить целевую группу и выберите созданную ранее целевую группу nlb-tg. Если группа одна, она будет выбрана автоматически.
    2. В блоке Проверка состояния нажмите кнопку Настроить и измените параметры:
      • Имя проверки — health-check-1.
      • Порог работоспособности — количество успешных проверок, после которого виртуальная машина будет считаться готовой к приему трафика: 5.
      • Порог неработоспособности — количество проваленных проверок, после которого на виртуальную машину перестанет подаваться трафик: 5.
    3. Нажмите кнопку Применить.
  7. Нажмите кнопку Создать.

См. раздел Как создать инфраструктуру с помощью Terraform.

Протестируйте отказоустойчивость

  1. В консоли управления выберите сервис Compute Cloud.

  2. Перейдите на страницу ВМ из созданной ранее группы. В блоке Сеть найдите публичный IP-адрес.

  3. Подключитесь к ВМ по протоколу SSH.

  4. Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:

    LAMP
    LEMP
    sudo service apache2 stop
    
    sudo service nginx stop
    
  5. Перейдите в раздел Network Load Balancer и выберите созданный ранее балансировщик nlb-1.

  6. В блоке Обработчики найдите IP-адрес обработчика. Откройте сайт в браузере, используя адрес обработчика.

    Несмотря на сбой в работе одного из веб-серверов, подключение должно пройти успешно.

  7. После завершения проверки снова запустите веб-сервис:

    LAMP
    LEMP
    sudo service apache2 start
    
    sudo service nginx start
    

Как удалить созданные ресурсы

Чтобы остановить работу хостинга и перестать платить за созданные ресурсы:

  1. Удалите сетевой балансировщик nlb-1.

  2. Удалите группу виртуальных машин nlb-vm-group.

Как создать инфраструктуру с помощью Terraform

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Mozilla Public License.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Чтобы разместить в группе виртуальных машин отказоустойчивый сайт с балансировкой нагрузки с помощью Terraform:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

  2. Подготовьте файлы с описанием инфраструктуры:

    Готовый архив
    Создание вручную
    1. Создайте папку для файлов.
    2. Скачайте архив (2 КБ).
    3. Разархивируйте архив в папку. В результате в ней появится конфигурационный файл load-balancer.tf.
    1. Создайте папку для файлов.

    2. Создайте в папке конфигурационный файл load-balancer.tf:

      load-balancer.tf
      terraform {
        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 см. в документации провайдера:

    • yandex_iam_service_account
    • yandex_resourcemanager_folder_iam_member
    • yandex_compute_instance_group
    • yandex_lb_network_load_balancer
    • yandex_vpc_network
    • yandex_vpc_subnet
  3. В блоке variable укажите значение переменной folder_id — идентификатор каталога, в котором создаются необходимые ресурсы.

  4. В блоке metadata укажите метаданные для создания виртуальной машины и содержимое SSH-ключа. Ключ указывается в формате <любое_имя>:<содержимое_SSH-ключа>. Указанное имя пользователя не играет роли, ключ будет присвоен пользователю, который задан в конфигурации образа LAMP (LEMP). В разных образах это разные пользователи. Подробнее см. в разделе Ключи, обрабатываемые в публичных образах.

  5. В блоке boot_disk укажите идентификатор одного из образов ВМ с нужным набором компонентов:

    • LAMP (Linux, Apache, MySQL, PHP).
    • LEMP (Linux, Nginx, MySQL, PHP).
  6. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

  7. Протестируйте отказоустойчивость.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте сетевую инфраструктуру
  • Создайте группу ВМ
  • Загрузите файлы веб-сайта
  • Создайте сетевой балансировщик
  • Протестируйте отказоустойчивость
  • Как удалить созданные ресурсы
  • Как создать инфраструктуру с помощью Terraform