[Документация Yandex Cloud](../../../index.md) > [Практические руководства](../../index.md) > Базовая инфраструктура > Отказоустойчивость и масштабирование > [Отказоустойчивый сайт с балансировкой нагрузки через Application Load Balancer](index.md) > Консоль управления

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


{% note info %}

В [регионе Казахстан](../../../overview/concepts/region.md) доступна только [зона доступности](../../../overview/concepts/geo-scope.md) `kz1-a`.

{% endnote %}


Чтобы создать инфраструктуру для [сайта с балансировкой нагрузки](index.md) в трех [зонах доступности](../../../overview/concepts/geo-scope.md) с использованием балансировщика [Application Load Balancer](../../../application-load-balancer/concepts/index.md) c помощью консоли управления Yandex Cloud:

1. [Подготовьте облако к работе](#before-you-begin).
1. [Создайте облачную сеть](#create-network).
1. [Создайте группы безопасности](#create-security-groups).
1. [Создайте группу виртуальных машин](#create-vms).
1. [Загрузите файлы сайта](#upload-files).
1. [Создайте группу бэкендов](#create-backend-group).
1. [Создайте HTTP-роутер](#create-http-routers-sites).
1. [Создайте L7-балансировщик](#create-alb).
1. [Настройте DNS](#configure-dns).
1. [Протестируйте отказоустойчивость](#test-ha).

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).

## Подготовьте облако к работе {#before-you-begin}

Зарегистрируйтесь в Yandex Cloud и создайте [платежный аккаунт](../../../billing/concepts/billing-account.md):
1. Перейдите в [консоль управления](https://kz.console.yandex.cloud), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Yandex Cloud Billing](https://kz.console.yandex.cloud/billing)** убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](../../../billing/quickstart/index.md) и [привяжите](../../../billing/operations/pin-cloud.md) к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет работать ваша инфраструктура, на [странице облака](https://kz.console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](../../../resource-manager/concepts/resources-hierarchy.md).

### Необходимые платные ресурсы {#paid-resources}

В стоимость поддержки инфраструктуры входит:
* плата за постоянно запущенные [ВМ](../../../compute/concepts/vm.md) ([тарифы Yandex Compute Cloud](../../../compute/pricing.md));
* плата за использование динамического [публичного IP-адреса](../../../vpc/concepts/address.md#public-addresses) ([тарифы Yandex Virtual Private Cloud](../../../vpc/pricing.md));
* плата за балансировку трафика ([тарифы Application Load Balancer](../../../application-load-balancer/pricing.md));
* плата за публичные [DNS-запросы](../../../glossary/dns.md) и [зоны DNS](../../../dns/concepts/dns-zone.md), если вы используете [Yandex Cloud DNS](../../../dns/index.md) ([тарифы Cloud DNS](../../../dns/pricing.md)).

## Создайте облачную сеть {#create-network}

Все ресурсы, созданные в сценарии, будут относиться к одной [облачной сети](../../../vpc/concepts/network.md).

Чтобы создать сеть:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. Нажмите кнопку **Создать сеть**.
  1. Укажите **Имя** сети: `mysite-network`.
  1. В поле **Дополнительно** выберите опцию **Создать подсети**.
  1. Нажмите кнопку **Создать сеть**.

{% endlist %}

## Создайте группы безопасности {#create-security-groups}

[Группы безопасности](../../../application-load-balancer/concepts/application-load-balancer.md#security-groups) содержат правила, которые разрешают [балансировщику](../../../application-load-balancer/concepts/application-load-balancer.md) получать входящий трафик и отправлять его на ВМ, а ВМ — получать этот трафик.

Чтобы создать группы безопасности для балансировщика и для [группы ВМ](../../../compute/concepts/instance-groups/index.md):

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. На панели слева выберите ![image](../../../_assets/console-icons/shield.svg) **Группы безопасности**. 
  1. Создайте группу безопасности для балансировщика:
     1. Нажмите кнопку **Создать группу безопасности**.
     1. Введите имя группы, например `alb-sg`.
     1. Выберите сеть, которой будет назначена группа безопасности.
     1. В блоке **Правила** создайте следующие правила по инструкции под таблицей:

        Направление<br>трафика | Описание | Диапазон<br>портов | Протокол | Тип источника /<br>назначения | Источник /<br>назначение
        --- | --- | --- | --- | --- | ---
        `Исходящий` | `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` | `Проверки состояния балансировщика` | —

        1. Выберите вкладку **Исходящий трафик** или **Входящий трафик**.
        1. Нажмите кнопку **Добавить правило**.
        1. В открывшемся окне в поле **Диапазон портов** укажите один порт или диапазон портов, куда или откуда будет поступать трафик.
        1. В поле **Протокол** укажите нужный протокол или оставьте **Любой**, чтобы разрешить передачу трафика по всем протоколам.
        1. В поле **Назначение** или **Источник** выберите назначение правила:
           * `CIDR` — правило будет применено к диапазону IP-адресов. В поле **CIDR блоки** укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку **Добавить CIDR**.
           * `Группа безопасности` — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
           * `Проверки состояния балансировщика` — правило, которое позволяет балансировщику проверять состояние ВМ.
        1. Нажмите кнопку **Сохранить**. Таким образом создайте все правила из таблицы.
     1. Нажмите кнопку **Сохранить**.
  1. Аналогично создайте группу безопасности для группы ВМ с именем `alb-vm-sg`, той же сетью и следующими правилами:

     Направление<br>трафика | Описание | Диапазон<br>портов | Протокол | Тип источника | Источник
     --- | --- | --- | --- | --- | ---
     `Входящий` | `balancer` | `80` | `TCP` | `Группа безопасности` | `alb-sg`
     `Входящий` | `ssh` | `22` | `TCP` | `CIDR` | `0.0.0.0/0`

{% endlist %}

## Создайте группу ВМ {#create-vms}

На ВМ из [целевой группы](../../../application-load-balancer/concepts/target-group.md) развертываются [бэкенды](../../../application-load-balancer/concepts/backend-group.md) вашего приложения. Целевая группа будет подключена к балансировщику, чтобы на эндпоинты бэкендов приложения можно было направлять запросы.

Чтобы создать группу ВМ с минимальной конфигурацией:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Compute Cloud**.
  1. Откройте вкладку **Группы виртуальных машин** и нажмите кнопку **Создать группу виртуальных машин**.
  1. В блоке **Базовые параметры**:
     * Введите имя группы ВМ, например `website-vm-group`.
     * Выберите [сервисный аккаунт](../../../iam/concepts/users/service-accounts.md) из списка или создайте новый. Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, назначьте сервисному аккаунту [роль](../../../iam/concepts/access-control/roles.md) `editor`. По умолчанию все операции с группами безопасности выполняются от имени сервисного аккаунта.
  1. В блоке **Распределение** выберите три зоны доступности (`kz1-a`, `kz1-b` и `kz1-d`), чтобы обеспечить отказоустойчивость хостинга.
  1. В блоке **Шаблон виртуальной машины** нажмите кнопку **Задать** и укажите [шаблон](../../../compute/concepts/instance-groups/instance-template.md) ВМ:
     * В блоке **Образ загрузочного диска** перейдите на вкладку **Marketplace** и выберите продукт [LEMP](https://yandex.cloud/ru-kz/marketplace/products/yc/lemp) и нажмите кнопку **Использовать**.
     * В блоке **Диски и файловые хранилища** укажите:
       * **Тип** [диска](../../../compute/concepts/disk.md) — `HDD`.
       * **Размер** — `3 ГБ`.
     * В блоке **Вычислительные ресурсы** укажите:
       * **Платформа** — `Intel Cascade Lake`.
       * **Гарантированная доля vCPU** — `5%`.
       * **vCPU** — `2`.
       * **RAM** — `1 ГБ`.
     * В блоке **Сетевые настройки**:
       * Выберите облачную сеть и ее подсети.
       * В поле **Публичный IP-адрес** выберите **Автоматически**.
       * Выберите группу безопасности `alb-vm-sg`.
     * В блоке **Доступ** укажите данные для доступа на ВМ:
       * В поле **Сервисный аккаунт** выберите сервисный аккаунт для привязки к ВМ.
       * В поле **Логин** введите имя пользователя.
       * В поле **SSH-ключ** вставьте содержимое файла открытого ключа.

       Для подключения по [SSH](../../../glossary/ssh-keygen.md) необходимо создать пару ключей. Подробнее в разделе [Подключиться к ВМ Linux по SSH](../../../compute/operations/vm-connect/ssh.md#creating-ssh-keys).
     * Нажмите кнопку **Сохранить**.
  1. В блоке **Масштабирование** укажите **Размер** группы ВМ — `3`.
  1. В блоке **Интеграция с Application Load Balancer** выберите опцию **Создать целевую группу** и укажите имя группы: `alb-tg`.
  1. Нажмите кнопку **Создать**.

{% endlist %}

Создание группы ВМ может занять несколько минут. Когда все ВМ перейдут в [статус](../../../compute/concepts/vm-statuses.md) `RUNNING`, вы можете [загрузить на них файлы сайта](#upload-files).

## Загрузите файлы сайта {#upload-files}

Чтобы проверить работу веб-сервера, необходимо загрузить файлы сайта на каждую ВМ. Для примера вы можете использовать файл `index.html` из [архива](https://storage.yandexcloud.kz/doc-files/index.html.zip).

Для каждой ВМ в [созданной группе](#create-vms) выполните следующее:
1. На вкладке **Виртуальные машины** нажмите на имя нужной ВМ в списке.
1. Скопируйте **Публичный IPv4-адрес** из блока **Сеть**.
1. [Подключитесь](../../../compute/operations/vm-connect/ssh.md#vm-connect) к ВМ по протоколу SSH.
1. Выдайте права на запись для вашего пользователя на директорию `/var/www/html`:

   ```bash
   sudo chown -R "$USER":www-data /var/www/html
   ```

1. Загрузите на ВМ файлы сайта с помощью [протокола SCP](https://ru.wikipedia.org/wiki/SCP).

   {% list tabs group=operating_system %}

   - Linux/macOS {#linux-macos}

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

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

   - Windows {#windows}

     С помощью программы [WinSCP](https://winscp.net/eng/download.php) скопируйте локальную директорию с файлами в директорию `/var/www/html` на ВМ.

   {% endlist %}

## Создайте группу бэкендов {#create-backend-group}

Целевую группу, созданную вместе с группой ВМ, привяжите к [группе бэкендов](../../../application-load-balancer/concepts/backend-group.md) с настройками распределения трафика.

Для бэкендов в группах будут созданы [проверки состояния](../../../application-load-balancer/concepts/backend-group.md#health-checks): балансировщик будет периодически отправлять проверочные запросы к ВМ и ожидать ответа в течение определенного периода.

Чтобы создать группу бэкендов:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором вы создали группу ВМ.
  1. Перейдите в сервис **Application Load Balancer**.
  1. Откройте вкладку **Группы бэкендов**.
  1. Нажмите кнопку **Создать группу бэкендов**.
  1. Введите имя группы бэкендов, например `website-bg`.
  1. В блоке **Бэкенды** нажмите кнопку **Добавить**.
  1. Введите имя бэкенда, например `backend-1`.
  1. В поле **Целевые группы** выберите созданную ранее целевую группу `alb-tg`.
  1. Укажите **Порт**, на котором ВМ бэкенда будут принимать входящий трафик от балансировщика: `80`.
  1. Нажмите кнопку **Добавить проверку состояния**.
  1. Укажите **Порт**, на котором ВМ бэкенда будут принимать проверочные соединения: `80`.
  1. Укажите **Путь**, к которому будет обращаться балансировщик при проверке состояния: `/`.
  1. Нажмите кнопку **Создать**.

{% endlist %}

## Создайте HTTP-роутер {#create-http-routers-sites}

Привяжите группу бэкендов к [HTTP-роутеру](../../../application-load-balancer/concepts/http-router.md) с правилами маршрутизации HTTP-запросов.

Чтобы создать HTTP-роутер и добавить в него маршрут:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Откройте вкладку **HTTP-роутеры**.
  1. Нажмите кнопку **Создать HTTP-роутер**.
  1. Введите имя роутера, например `website-router`.
  1. Нажмите кнопку **Добавить виртуальный хост**.
  1. Введите имя виртуального хоста, например `alb-host`.
  1. В поле **Authority** введите доменное имя сайта: `alb-example.com`.
  1. Нажмите кнопку **Добавить маршрут**.
  1. Введите имя, например `route-1`.
  1. В поле **Группа бэкендов** выберите созданную ранее группу `website-bg`.
  1. Остальные настройки оставьте без изменений и нажмите кнопку **Создать**.

{% endlist %}

## Создайте L7-балансировщик {#create-alb}

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

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Откройте вкладку **Балансировщики**.
  1. Нажмите кнопку **Создать L7-балансировщик**.
  1. Введите имя балансировщика, например `website-alb`.
  1. В блоке **Сетевые настройки** выберите сеть, к которой подключена группа ВМ, и [созданную ранее](#create-security-groups) группу безопасности `alb-sg`.
  1. В блоке **Размещение** выберите подсети для узлов балансировщика в каждой зоне доступности и включите прием трафика.
  1. В блоке **Обработчики** нажмите кнопку **Добавить обработчик**.
  1. Введите имя обработчика, например `alb-listener`.
  1. В блоке **Публичный IP-адрес** включите передачу трафика.
  1. Укажите порт `80`.
  1. В поле **HTTP-роутер** выберите созданный ранее роутер `website-router`.
  1. Нажмите кнопку **Создать**.

{% endlist %}

## Настройте DNS {#configure-dns}

Доменное имя `alb-example.com`, которое вы хотите использовать для сайта, нужно связать с IP-адресом балансировщика с помощью [записей DNS](../../../dns/concepts/resource-record.md):

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Application Load Balancer**.
  1. Скопируйте IP-адрес созданного балансировщика.
  1. На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.
  1. Создайте или измените [A-запись](../../../dns/concepts/resource-record.md#a) и [CNAME-запись](../../../dns/concepts/resource-record.md#cname) для `alb-example.com`:

      ```text
      alb-example.com. A <IP-адрес_L7-балансировщика>
      alb-example.com. CNAME
      ```

      Если вы пользуетесь [Yandex Cloud DNS](../../../dns/index.md), настройте записи по следующей инструкции:

      {% cut "Инструкция по настройке DNS-записей для Cloud DNS" %}

      Чтобы получить доступ к именам из публичной зоны, вам нужно делегировать домен. Укажите адреса серверов `ns1.yandexcloud.kz` и `ns2.yandexcloud.kz` в личном кабинете вашего регистратора.

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите сервис **Cloud DNS**.
      1. Если у вас нет публичной [зоны DNS](../../../dns/concepts/dns-zone.md), создайте ее:
          1. Нажмите кнопку **Создать зону**.
          1. Укажите **Имя** зоны: `alb-zone`.
          1. В поле **Зона** укажите доменное имя сайта с точкой в конце: `alb-example.com.`
          1. Выберите **Тип** зоны — `Публичная`.
          1. Нажмите кнопку **Создать**.
      1. Создайте А-запись в зоне:
          1. Нажмите кнопку **Создать запись**.
          1. **Имя**: оставьте пустым.
          1. **Тип**: оставьте значение `А`.
          1. **TTL** (время кеширования записи): оставьте значение по умолчанию.
          1. **Значение**: введите публичный IP-адрес балансировщика `website-alb`.
          1. Нажмите кнопку **Создать**.
      1. Создайте CNAME-запись:
          1. Нажмите кнопку **Создать запись**.
          1. **Имя**: `www`.
          1. **Тип**: выберите значение `CNAME`.
          1. **TTL** (время кеширования записи): оставьте значение по умолчанию.
          1. **Значение**: введите `alb-example.com`.
          1. Нажмите кнопку **Создать**.

      {% endcut %}

{% endlist %}

## Протестируйте отказоустойчивость {#test-ha}

1. Откройте [консоль управления](https://kz.console.yandex.cloud).
1. Перейдите в сервис **Compute Cloud**.
1. Перейдите на страницу ВМ из созданной ранее группы.
1. Скопируйте **Публичный IPv4-адрес** из блока **Сеть**.
1. [Подключитесь](../../../compute/operations/vm-connect/ssh.md#vm-connect) к ВМ по протоколу SSH.
1. Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:

   ```bash
   sudo service nginx stop
   ```

1. Откройте ваш сайт в браузере. Несмотря на сбой в работе одного из веб-серверов, сайт должен успешно открыться.
1. После завершения проверки запустите веб-сервис:

   ```bash
   sudo service nginx start
   ```

## Как удалить созданные ресурсы {#clear-out}

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

1. Удалите нетарифицируемые ресурсы, которые блокируют удаление тарифицируемых ресурсов:
   1. [Удалите](../../../application-load-balancer/operations/application-load-balancer-delete.md) L7-балансировщик `website-alb`.
   1. [Удалите](../../../application-load-balancer/operations/http-router-delete.md) HTTP-роутер `website-router`.
   1. [Удалите](../../../application-load-balancer/operations/backend-group-delete.md) группу бэкендов `website-bg`.
1. [Удалите](../../../compute/operations/instance-groups/delete.md) группу ВМ `website-vm-group`.
1. Если вы использовали Yandex Cloud DNS, то [удалите](../../../dns/operations/resource-record-delete.md) DNS-записи и [удалите](../../../dns/operations/zone-delete.md) DNS-зону.

#### Полезные ссылки {#see-also}

* [Отказоустойчивый сайт с балансировкой нагрузки через Yandex Application Load Balancer с помощью Terraform](terraform.md)