Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Network Load Balancer
  • Начало работы
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Реализация отказоустойчивых сценариев для сетевых виртуальных машин
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
      • Обзор
      • Консоль управления
      • Terraform
    • Обновление группы ВМ под нагрузкой
    • Интеграция Cloud DNS и корпоративного сервиса DNS
    • Подключение к Object Storage из Virtual Private Cloud
    • Подключение к Container Registry из Virtual Private Cloud
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW
    • Развертывание Microsoft Exchange
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Загрузите файлы сайта
  • Протестируйте отказоустойчивость
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Отказоустойчивый сайт с балансировкой нагрузки через Network Load Balancer
  3. Terraform

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

Статья создана
Yandex Cloud
Улучшена
Обновлена 6 марта 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Загрузите файлы сайта
  • Протестируйте отказоустойчивость
  • Как удалить созданные ресурсы

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

  1. Подготовьте облако к работе.
  2. Создайте инфраструктуру.
  3. Загрузите файлы сайта.
  4. Протестируйте отказоустойчивость.

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

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

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

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

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

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

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

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

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

Создайте инфраструктуруСоздайте инфраструктуру

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

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

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

Для создания инфраструктуры c помощью Terraform:

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

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

    Готовая конфигурация
    Вручную
    1. Склонируйте репозиторий с конфигурационными файлами:

      git clone https://github.com/yandex-cloud-examples/yc-nlb-fault-tolerant-site.git
      
    2. Перейдите в директорию с репозиторием. В ней должен появиться файл 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). В разных образах это разные пользователи. Подробнее см. в разделе Ключи, обрабатываемые в публичных образах Yandex Cloud.

    Пару SSH-ключей необходимо создать самостоятельно.

  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.

После создания инфраструктуры, загрузите файлы сайта.

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

Чтобы проверить работу веб-сервера, необходимо загрузить файлы сайта на каждую ВМ. Для примера вы можете использовать файл 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 на ВМ.

После загрузки всех файлов, протестируйте отказоустойчивость.

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

  1. Узнайте публичный IP-адрес любой ВМ из созданной группы.

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

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

    LAMP
    LEMP
    sudo service apache2 stop
    
    sudo service nginx stop
    
  4. Узнайте IP-адрес обработчика.

  5. Откройте сайт в браузере, используя адрес обработчика.

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

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

    LAMP
    LEMP
    sudo service apache2 start
    
    sudo service nginx start
    

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

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

  1. Откройте конфигурационный файл load-balancer.tf и удалите описание создаваемой инфраструктуры из файла.

  2. Примените изменения:

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

См. такжеСм. также

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

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

Предыдущая
Консоль управления
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»