Схема определения LoadBalancerProbe для Облачных служб Azure (классических)

Важно!

Облачные службы (классическая версия) объявлены устаревшими для новых клиентов. Их поддержка будет полностью прекращена 31 августа 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой . Это новая модель развертывания на основе Azure Resource Manager.

Проверка подсистемы балансировки нагрузки — пользовательский процесс проверки работоспособности конечных точек UDP и конечных точек в экземплярах ролей. LoadBalancerProbe — не изолированный элемент. Он объединяется с веб- или рабочей ролью в файле определения службы. Объект LoadBalancerProbe могут использовать несколько ролей.

По умолчанию определения службы хранятся в файле с расширением .csdef.

Функционирование проверки подсистемы балансировки нагрузки

Azure Load Balancer отвечает за маршрутизацию входящего трафика к экземплярам ролей. Подсистема балансировки нагрузки определяет, какие экземпляры могут принимать трафик. Она регулярно проверяет каждый экземпляр, чтобы определить его работоспособность. Эта подсистема проверяет все экземпляры по несколько раз в минуту. Существуют два различных варианта, используя которые подсистема балансировки нагрузки может узнать о работоспособности экземпляров: проверка по умолчанию и пользовательская проверка, для реализации которой нужно определить LoadBalancerProbe в CSDEF-файле.

Проверка подсистемы балансировки нагрузки по умолчанию использует гостевой агент в виртуальной машине. Агент прослушивает экземпляры и отправляет ответ HTTP 200 ОК, только если экземпляр находится в состоянии "Готов" (т. е. не пребывает в другом состоянии, например "Занят", "Перезапуск", "Остановка" и др.). Если гостевой агент не отправляет ответ HTTP 200 ОК, Azure Load Balancer отмечает экземпляр как неотвечающий и перестает отправлять к нему трафик. Azure Load Balancer продолжит проверять связь с экземпляром и снова направит трафик к нему, если агент даст ответ HTTP 200. При использовании веб-роли код веб-сайта обычно выполняется в процессе w3wp.exe, который не отслеживается структурой Azure или гостевым агентом. Это означает, что ошибки в процессе w3wp.exe (например, ответы HTTP 500) не передаются гостевому агенту и подсистема балансировки нагрузки не знает, что этот экземпляр нужно исключить из очереди.

Пользовательская проверка подсистемы балансировки нагрузки переопределяет проверку гостевого агента по умолчанию и позволяет создать собственную пользовательскую логику для определения работоспособности экземпляра роли. Подсистема балансировки нагрузки регулярно поверяет конечную точку (по умолчанию — каждые 15 секунд), и экземпляр считается работоспособным, если отправляет ответ TCP ACK или HTTP 200 в течение периода ожидания (по умолчанию — 31 секунда). Это может быть полезным для реализации логики, где из работы подсистемы балансировки нагрузки будут изыматься экземпляры, возвращающие, например, состояние, отличающееся от 200, если экземпляр использует более 90 % ресурсов ЦП. Для веб-ролей, использующих w3wp.exe, также предоставляется автоматический мониторинг веб-сайта, так как при возникновении ошибок в коде веб-сайта проверке подсистемы балансировки нагрузки будет возвращено состояние, отличное от 200. Если не определить LoadBalancerProbe в CSDEF-файле, то у подсистемы балансировки нагрузки будет поведение по умолчанию (как описано выше).

Если вы определили пользовательскую проверку подсистемы балансировки нагрузки, необходимо убедиться, что логика учитывает метод RoleEnvironment.OnStop. При проверке подсистемы балансировки нагрузки по умолчанию экземпляр перестает использоваться до вызова OnStop, а при пользовательской проверке он может и дальше возвращать ответ 200 ОК во время события OnStop. Если вам необходимо использовать событие OnStop, чтобы очистить кэш, остановить службу или внести изменения, которые могут повлиять на поведение среды выполнения службы, следует убедиться, что логика проверки подсистемы балансировки загрузки исключит экземпляр из работы.

Базовая схема определения службы для проверки подсистемы балансировки нагрузки

Ниже приведен базовый формат файла определения службы, содержащий проверку подсистемы балансировки нагрузки.

<ServiceDefinition …>
   <LoadBalancerProbes>
      <LoadBalancerProbe name="<load-balancer-probe-name>" protocol="[http|tcp]" path="<uri-for-checking-health-status-of-vm>" port="<port-number>" intervalInSeconds="<interval-in-seconds>" timeoutInSeconds="<timeout-in-seconds>"/>
   </LoadBalancerProbes>
</ServiceDefinition>

Элементы схемы

Элемент LoadBalancerProbes файла определения службы содержит следующее:

Элемент LoadBalancerProbes

LoadBalancerProbes описывает коллекцию проверок подсистемы балансировки нагрузки. Это родительский элемент для LoadBalancerProbe.

Элемент LoadBalancerProbe

LoadBalancerProbe определяет проверку работоспособности для модели. Вы можете указать несколько проверок подсистемы балансировки нагрузки.

В таблице ниже описаны атрибуты элемента LoadBalancerProbe.

attribute Тип Описание
name string Обязательный. Имя проверки подсистемы балансировки нагрузки. Имя должно быть уникальным.
protocol string Обязательный. Указывает протокол конечной точки. Возможные значения: http или tcp. Если указано значение tcp, чтобы проверка считалась успешной, требуется ответ ACK. Если указано http, проверка считается успешной, если от ресурса с указанным URI получен ответ 200 ОК.
path string URI используется, чтобы запросить состояние работоспособности у виртуальной машины. Атрибут path обязателен, если для protocol задано значение http. В других случаях он запрещен.

Значение по умолчанию отсутствует.
port integer Необязательный элемент. Порт связи с проверкой. Он необязателен для конечных точек, так как этот же порт будет использоваться для проверки. Вы также можете настроить другой порт для их проверки. Диапазон возможных значений: от 1 до 65 535 включительно.

Значение по умолчанию устанавливается конечной точкой.
intervalInSeconds integer Необязательный элемент. Интервал в секундах, определяющий частоту, с которой проверяется состояние работоспособности конечной точки. Обычно интервал немного меньше, чем половина выделенного времени ожидания (в секундах), что позволяет провести две полные проверки, прежде чем исключить экземпляр из работы.

Значение по умолчанию равно 15, а минимальное — 5.
timeoutInSeconds integer Необязательный элемент. Период времени ожидания в секундах. После его применения к проверке без ответа останавливается передача трафика соответствующей конечной точке. Это значение позволяет изымать конечные точки из работы раньше или позже, чем это произошло бы при использовании обычного параметра количества попыток в Azure (для которого используется значение по умолчанию).

Значение по умолчанию равно 31, а минимальное — 11.

См. также:

Схема определения облачных служб (классических).