Создать группу бэкендов
Чтобы создать группу бэкендов:
-
В консоли управления
выберите каталог, в котором будет создаваться группа бэкендов. -
В списке сервисов выберите Application Load Balancer.
-
На панели слева выберите
Группы бэкендов. -
Нажмите кнопку Создать группу бэкендов.
-
Введите имя группы бэкендов.
-
Выберите тип группы бэкендов:
HTTP— для HTTP- или HTTPS-трафика.gRPC— для HTTP- или HTTPS-трафика с вызовами gRPC -процедур.Stream— для TCP-трафика без шифрования или с TLS-шифрованием.
-
(Опционально) Включите привязку сессий. Для группы бэкендов типа
HTTPилиgRPCдоступны следующие режимы привязки:По IP-адресу.По HTTP-заголовку.По cookie.
Для группы бэкендов типа
Streamсессии привязываются по IP-адресу клиента.Примечание
Сейчас привязка сессий работает, только если в группе бэкендов активен (имеет положительный вес) один бэкенд, он состоит из одной или нескольких целевых групп и для него выбран режим балансировки
MAGLEV_HASH. -
В блоке Бэкенды нажмите кнопку Добавить. Задайте настройки бэкенда:
-
Имя бэкенда.
-
Вес — относительный вес бэкенда при распределении трафика. Если опция в поле отключена, эндпоинты бэкенда не будут получать трафик (вес будет равен 0).
-
Тип бэкенда (для группы бэкендов типа
HTTP):Целевая группа(целевые группы Application Load Balancer) илиБакет(бакет Object Storage). Для группы бэкендов типаgRPCили Stream тип любого бэкенда —Целевая группа. Подробнее о типах бэкендов см. в разделе Типы бэкендов. -
Следующие настройки доступны только для типа бэкенда Целевая группа:
-
В блоке Настройки балансировки:
- Режим балансировки — режим распределения трафика между эндпоинтами бэкенда.
- Порог для режима паники — доля работоспособных эндпоинтов, при которой включится режим паники: балансировщик будет распределять запросы во все эндпоинты, не учитывая результаты проверок состояния.
- Локализация трафика — доля входящего трафика, которую узел балансировщика передает бэкендам из своей зоны доступности. Остальной трафик поровну делится между другими зонами. Подробнее см. в разделе Локализация трафика.
- Строгая локализация — опция, при которой балансировщик будет отвечать ошибкой (
503 Service Unavailable), если в зоне доступности, где был принят запрос, нет работающих бэкендов приложения.
-
В блоке Настройки протокола:
-
Для группы бэкендов типа
HTTP:-
HTTP/2 — опция использования протокола HTTP/2 при отправке запросов к бэкенду для группы бэкендов типа
HTTP. По умолчанию используется протокол версии 1.1. Группы бэкендов типаgRPCподдерживают только HTTP/2-соединения. -
Протокол — протокол соединений с бэкендом:
HTTP(без шифрования) илиHTTPS(с TLS-шифрованием). Для протоколаHTTPSукажите:- SNI. Доменное имя хоста для Server Name Indication — расширения TLS.
- Доверенный корневой сертификат. Укажите корневой сертификат
(Root CA) для цепочки сертификатов, установленной на эндпоинтах бэкендов. Поддерживаются сертификаты стандарта X.509 в формате PEM .
-
-
Для группы бэкендов типа
gRPC:- Протокол — протокол соединений с бэкендом:
ОткрытыйилиЗашифрованный. Для зашифрованного протокола укажите SNI и Доверенный корневой сертификат (см. выше).
- Протокол — протокол соединений с бэкендом:
-
Для группы бэкендов типа
Stream:-
Протокол PROXY — опция, при которой балансировщик передает бэкенду метаданные своего соединения с клиентом, в том числе его IP-адрес, по протоколу PROXY от HAProxy
. -
Протокол — протокол соединений с бэкендом:
ОткрытыйилиЗашифрованный. Для зашифрованного протокола укажите SNI и Доверенный корневой сертификат (см. выше).
-
-
-
-
Следующие настройки доступны только для типа бэкенда Бакет для типа группы бэкендов HTTP:
- Формат указания бакета — выберите одну из опций:
СписокилиID. - Бакет — выберите из списка или укажите идентификатор нужного бакета.
- Формат указания бакета — выберите одну из опций:
-
В блоке HTTP проверка состояния, gRPC проверка состояния или Stream проверка состояния:
-
Таймаут, с — время ожидания ответа. Максимальный период, на который может быть установлено соединение.
-
Интервал — интервал отправки проверочных запросов.
-
Порог работоспособности — количество последовательных успешных проверок, после которых эндпоинт считается работоспособным. Игнорируется в начале работы балансировщика: достаточно одной проверки.
-
Порог неработоспособности — количество последовательных неуспешных проверок, после которых эндпоинт считается неработоспособным. Игнорируется, если бэкенд один раз ответил HTTP-кодом состояния
503 Service Unavailable: он сразу считается неработоспособным. -
Порт.
-
Тип — протокол, по которому будет осуществляться проверка:
HTTP,gRPCилиStream. Тип проверки может не совпадать с типом группы бэкендов. Дополнительно укажите:-
Для типа
HTTP:- Путь — путь в URI запроса к эндпоинту.
- Authority — значение заголовка
Hostдля HTTP/1.1 или псевдо-заголовка:authorityдля HTTP/2, которое будет передаваться эндпоинтам бэкенда при проверках состояния. - HTTP/2 — опция использования протокола HTTP версии 2.
- HTTP-коды — список HTTP-кодов, которые считаются корректными при проверке состояния бэкенда.
-
Для типа
gRPC:- Имя сервиса — имя проверяемого gRPC-сервиса. Если сервис не указан, проверяется общее состояние бэкенда.
-
Для типа
Stream:- Отправка — данные, которые отправляются на эндпоинт для проверки состояния.
- Получение — данные, которые должны поступить с эндпоинта, чтобы он прошел проверку состояния.
-
Внимание
Если в зоне доступности все бэкенды с подключенными проверками состояния не прошли проверки, трафик перестанет поступать в зону, даже если в ней есть рабочие бэкенды без проверок состояния.
Рекомендуется настраивать проверки состояния для всех бэкендов.
Чтобы добавить проверку состояния, внизу блока бэкенда нажмите кнопку Добавить проверку состояния и задайте настройки проверки.
Чтобы удалить проверку состояния, напротив заголовка HTTP проверка состояния, gRPC проверка состояния или Stream проверка состояния нажмите
и выберите Удалить. -
-
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Примечание
Создать группу бэкендов типа gRPC можно в консоли управления
-
Посмотрите описание команды CLI для создания группы бэкендов:
yc alb backend-group create --help -
Создайте группу бэкендов, выполнив команду:
yc alb backend-group create <имя_группы_бэкендов>Результат:
id: a5dg2cv4ngne******** name: test-backend-group folder_id: aoerb349v3h4******** created_at: "2021-02-11T20:46:21.688940670Z" -
Добавьте в группу бэкенд и проверку состояния.
Внимание
Если в зоне доступности все бэкенды с подключенными проверками состояния не прошли проверки, трафик перестанет поступать в зону, даже если в ней есть рабочие бэкенды без проверок состояния.
Рекомендуется настраивать проверки состояния для всех бэкендов.
Внутри группы все бэкенды должны быть одного типа —
HTTP,gRPCилиStream.HTTP-бэкенд
Выполните команду:
yc alb backend-group add-http-backend \ --backend-group-name <имя_бэкенд_группы> \ --name <имя_добавляемого_бэкенда> \ --weight <вес_бэкенда> \ --port <порт_бэкенда> \ --target-group-id=<идентификатор_целевой_группы> \ --panic-threshold 90 \ --http-healthcheck port=80,healthy-threshold=10,unhealthy-threshold=15,expected-statuses=211,\ timeout=10s,interval=2s,host=<адрес_хоста>,path=<путь>Где:
--name— имя существующего бэкенда, параметры которого хотите обновить, или имя нового бэкенда, который хотите добавить.--panic-threshold— порог для режима паники.--http-healthcheck— параметры проверки состояния ресурсов:port— порт.healthy-threshold— порог работоспособности.unhealthy-threshold— порог неработоспособности.expected-statuses— код состояния HTTP, который будет считаться корректным при проверке состояния бэкенда. Чтобы добавить несколько значений, укажите их через запятую:expected-statuses=201,expected-statuses=205,expected-statuses=302. Коды могут принимать значения от100до599. Если параметр не задан, код ответа будет один —200.timeout— максимальный период, на который может быть установлено соединение.interval— интервал.host— адрес хоста.path— путь.
Результат:
id: a5dqkr2mk3rr******** name: <имя_группы_бэкендов> folder_id: aoe197919j8e******** http: backends: - name: <имя_бэкенда> backend_weight: "1" load_balancing_config: panic_threshold: "90" port: "80" target_groups: target_group_ids: - a5d2iap3nue9******** healthchecks: - timeout: 10s interval: 2s healthy_threshold: "10" unhealthy_threshold: "15" healthcheck_port: "80" http: host: <адрес_хоста> path: <путь> created_at: "2021-02-11T20:46:21.688940670Z"gRPC-бэкенд
Выполните команду:
yc alb backend-group add-grpc-backend \ --backend-group-name <имя_бэкенд_группы> \ --name <имя_добавляемого_бэкенда> \ --weight <вес_бэкенда> \ --port <порт_бэкенда> \ --target-group-id=<идентификатор_целевой_группы> \ --panic-threshold 90 \ --grpc-healthcheck port=80,healthy-threshold=10,unhealthy-threshold=15,\ timeout=10s,interval=2s,service-name=<имя_gRPC-сервиса>Где:
--panic-threshold— порог для режима паники.--grpc-healthcheck— параметры проверки состояния ресурсов:port— порт.healthy-threshold— порог работоспособности.unhealthy-threshold— порог неработоспособности.timeout— максимальный период, на который может быть установлено соединение.interval— интервал.service-name— имя проверяемого gRPC-сервиса. Если сервис не указан, проверяется общее состояние бэкенда.
Результат:
id: a5dqkr2mk3rr******** name: <имя_группы_бэкендов> folder_id: aoe197919j8e******** grpc: backends: - name: <имя_бэкенда> backend_weight: "12" load_balancing_config: panic_threshold: "90" port: "80" target_groups: target_group_ids: - a5d2iap3nue9******** healthchecks: - timeout: 10s interval: 2s healthy_threshold: "10" unhealthy_threshold: "15" healthcheck_port: "80" grpc: service_name: <имя_gRPC_сервиса> created_at: "2023-06-17T13:04:08.567141292Z"Stream-бэкенд
Выполните команду:
yc alb backend-group add-stream-backend \ --backend-group-name <имя_бэкенд_группы> \ --name <имя_добавляемого_бэкенда> \ --weight <вес_бэкенда> \ --port <порт_бэкенда> \ --target-group-id=<идентификатор_целевой_группы> \ --panic-threshold 90 \ --enable-proxy-protocol \ --keep-connections-on-host-health-failure \ --stream-healthcheck port=80,healthy-threshold=10,unhealthy-threshold=15,\ timeout=10s,interval=2s,send-text=<данные_к_эндпоинту>,receive-text=<данные_от_эндпоинта>Где:
--panic-threshold— порог для режима паники.--enable-proxy-protocol— опция, при которой балансировщик передает бэкенду метаданные своего соединения с клиентом, в том числе его IP-адрес, по протоколу PROXY от HAProxy . Если опция не задана, в бэкенд передается только IP-адрес балансировщика.--keep-connections-on-host-health-failure— опция позволяет сохранять соединение, даже когда проверка состояния неуспешна.--stream-healthcheck— параметры проверки состояния ресурсов:port— порт.healthy-threshold— порог работоспособности.unhealthy-threshold— порог неработоспособности.timeout— максимальный период, на который может быть установлено соединение.interval— интервал.send-text— данные, которые отправляются на эндпоинт для проверки состояния.receive-text— данные, которые должны поступить с эндпоинта, чтобы он прошел проверку состояния.
Результат:
id: ds77tero4f5******** name: <имя_группы_бэкендов> folder_id: b1gu6g9ielh6******** stream: backends: - name: <имя_бэкенда> backend_weight: "1" port: "80" target_groups: target_group_ids: - ds7eof3r2cte******** healthchecks: - timeout: 10s interval: 2s healthy_threshold: "10" unhealthy_threshold: "15" healthcheck_port: "80" stream: send: text: <данные_к_эндпоинту> receive: text: <данные_от_эндпоинта> enable_proxy_protocol: true created_at: "2022-04-06T09:17:57.104324513Z"
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле Terraform параметры ресурса, который необходимо создать:
resource "yandex_alb_backend_group" "test-backend-group" { name = "<имя_группы_бэкендов>" session_affinity { connection { source_ip = <режим_привязки_сессий_по_IP-адресу> } } stream_backend { name = "<имя_бэкенда>" weight = 1 port = 80 target_group_ids = ["<идентификатор_целевой_группы>"] load_balancing_config { panic_threshold = 90 } enable_proxy_protocol = true healthcheck { timeout = "10s" interval = "2s" healthy_threshold = 10 unhealthy_threshold = 15 keep_connections_on_host_health_failure = <true_или_false> stream_healthcheck { send = "<данные_к_эндпоинту>" receive = "<данные_от_эндпоинта>" } http_healthcheck { path = "<путь>" host = "<хост>" expected_statuses = [<HTTP-коды>] } } } }Где:
yandex_alb_backend_group— параметры группы бэкендов:-
name— имя группы бэкендов. -
session_affinity— настройки привязки сессий (необязательный параметр).Примечание
Сейчас привязка сессий работает, только если в группе бэкендов активен (имеет положительный вес) один бэкенд, он состоит из одной или нескольких целевых групп и для него выбран режим балансировки
MAGLEV_HASH.connection— режим привязки сессий по IP-адресу (source_ip). Может принимать значенияtrueилиfalse. Также доступны режимыcookieиheader. Должен быть указан только один из режимов. Если группа бэкендов имеет типStream(состоит из ресурсовstream_backend), то привязка сессий может иметь только режимconnection.
-
http_backend,grpc_backendиstream_backend— тип бэкенда. Внутри группы все бэкенды должны быть одного типа —HTTP,gRPCилиStream.
-
Параметры бэкенда:
-
name— имя бэкенда. -
port— порт бэкенда. -
weight— вес бэкенда. -
target_group_ids— идентификатор целевой группы. Получить список доступных целевых групп можно с помощью команды CLI:yc alb target-group list. -
load_balancing_config— параметры балансировки:panic_threshold— порог для режима паники.
-
enable_proxy_protocol— опция, при которой балансировщик передает бэкенду метаданные своего соединения с клиентом, в том числе его IP-адрес, по протоколу PROXY от HAProxy . Если опция не задана, в бэкенд передается только IP-адрес балансировщика. Параметр доступен только для бэкендов типаStream. -
healthcheck— параметры проверки состояния:timeout— максимальный период, на который может быть установлено соединение.interval— интервал.healthy_threshold— порог работоспособности.unhealthy_threshold— порог неработоспособности.keep_connections_on_host_health_failure— опция, при которой соединения сохраняются открытыми, даже если целевой хост переходит в статусUnhealthy.http_healthcheck— параметры проверки состояния типаHTTP:path— путь, например/health.host— адрес хоста, напримерexample.com.expected_statuses— список HTTP-кодов, соответствующих статусуHealthy. Например:[200, 201, 202].
grpc_healthcheck— параметры проверки состояния типаgRPC:service_name— имя проверяемого gRPC-сервиса. Если сервис не указан, проверяется общее состояние бэкенда.
stream_healthcheck— параметры проверки состояния типаStream:send— данные, которые отправляются на эндпоинт для проверки состояния.receive— данные, которые должны поступить с эндпоинта, чтобы он прошел проверку состояния.
Внимание
Если в зоне доступности все бэкенды с подключенными проверками состояния не прошли проверки, трафик перестанет поступать в зону, даже если в ней есть рабочие бэкенды без проверок состояния.
Рекомендуется настраивать проверки состояния для всех бэкендов.
Подробную информацию о параметрах ресурса
yandex_alb_backend_groupсм. в документации провайдера Terraform. -
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление ресурсов можно в консоли управления
или с помощью команды CLI:yc alb backend-group listОграничения по времени
Провайдер Terraform ограничивает время на выполнение операций с группами бэкендов Application Load Balancer 10 минутами.
Операции, которые длятся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию группы бэкендов блок
timeouts, например:resource "yandex_alb_backend_group" "<имя_группы_бэкендов>" { ... timeouts { create = "60m" update = "60m" delete = "60m" } } -
Воспользуйтесь методом REST API create для ресурса BackendGroup или вызовом gRPC API BackendGroupService/Create.