WEB — Health Monitor

Обзор

Health Monitor используется для проверки доступности Workers. На основе конфигурации каждого Health Monitor можно определить гибкие правила мониторинга доступности серверов для вывода недоступных серверов из пула балансировки или их восстановления при возобновлении работы.

Кроме стандартных режимов работы, вы можете создавать собственные скрипты проверки.

Настройка

В боковом меню слева разверните раздел Balancer и выберите Health Monitors.

../../_images/hm_main_window.png

Над таблицей расположена панель действий с кнопками:

  • New – добавить новую строку в таблицу для создания Health Monitor

  • Rollback – откатить незафиксированные изменения

  • Apply changes – применить внесённые изменения

  • Settings – настройки отображения таблицы (видимость колонок)

Чтобы создать новый Health Monitor, нажмите New. В таблице появится новая строка. Заполнить поля можно прямо в строке таблицы или нажать icon_edit и ввести параметры в боковой панели Edit Row. Поля Name и Type обязательны для заполнения. Для применения изменений нажмите Apply changes.

Чтобы удалить Health Monitor, нажмите icon_delete в строке нужного монитора, затем нажмите Apply changes.

Примечание

Имена объектов используют формат partition/name, например default/my-hm. Указание партиции в названии HM обязательно. Чтобы выбрать нужную партицию, щелкните по полю Name. В боком меню Edit Row название партиции необходимо вводить вручную.

Колонки таблицы

Колонка

Описание

Name

Имя Health Monitor в формате partition/name

Timeout

Время ожидания ответа от Worker (в секундах). По умолчанию – 5 секунд

Interval

Интервал (в секундах) между попытками проверки. По умолчанию – 5 секунд

Down retries

Количество неуспешных проверок, после которых Worker считается недоступным. По умолчанию – 2

Up retries

Количество успешных проверок, после которых Worker считается доступным. По умолчанию – 1

Type

Режим работы Health Monitor. Выбрать можно в выпадающем списке или нажав icon_edit

Режимы Health Monitor

Примечание

Настройки интервалов (Timeout, Interval, Down retries, Up retries) общие для всех режимов.

TCP, UDP, ICMP

../../_images/hm_tcp_upd_icmp.png
TCP

Доступность проверяется путём установления TCP-соединения между ADC и IP:port Worker. Проверка считается успешной, если:

  1. ADC отправляет SYN указанному Worker,

  2. ADC получает ACK от указанного Worker.

UDP

Доступность проверяется путём отправки UDP-запроса на IP:port Worker. Проверка считается успешной, если Health Monitor получает корректный ответ или не получает никакого ответа. Если получен ошибочный ответ, Worker удаляется из пула балансировки нагрузки.

ICMP

Доступность Worker проверяется с использованием ICMP-запросов эхо. Проверка считается успешной, если ADC получает ICMP-ответ от IP-адреса Worker.

HTTP

../../_images/hm_http.png

Дополнительные параметры для HTTP Health Monitor:

Поле

Описание

Expect code

HTTP-код состояния, ожидаемый от сервера. По умолчанию – 200. Подробнее см. RFC 7231#6.1

Expect body

Ожидаемое тело HTTP-ответа, например, <html><body><h1>Server1</h1></body></html>

Expect body file

Ожидаемое тело HTTP-ответа, взятое из файла, хранящегося в файловом хранилище

Host

Имя хоста в HTTP-заголовке, например, trafficsoft.ru

Port

Порт хоста в HTTP-заголовке. Диапазон: 1-65535

Request method

Метод HTTP-запроса согласно RFC 7231#4.3. Поддерживаемые методы: GET, POST, HEAD

Path

Путь. По умолчанию – /. Можно указать URL конкретной страницы, например, /checker/check.html

Username

Логин для базовой HTTP-аутентификации

Password

Пароль для базовой HTTP-аутентификации

HTTPS

../../_images/hm_https.png

Дополнительные параметры для HTTPS Health Monitor:

Поле

Описание

Expect code

HTTP-код состояния, ожидаемый от сервера. По умолчанию – 200. Подробнее см. RFC 7231#6.1

Expect body

Ожидаемое тело HTTP-ответа, например, <html><body><h1>Server1</h1></body></html>

Expect body file

Ожидаемое тело HTTP-ответа, взятое из файла, хранящегося в файловом хранилище

Host

Имя хоста в HTTP-заголовке, например, trafficsoft.ru. Если требуется Server Name Indication (SNI), значение, указанное в поле Host, также используется как SNI-значение для рукопожатия TLS

Port

Порт хоста в HTTP-заголовке. Диапазон: 1-65535

Request method

Метод HTTP-запроса согласно RFC 7231#4.3. Поддерживаемые методы: GET, POST, HEAD

Path

Путь. По умолчанию – /. Можно указать URL конкретной страницы, например, /checker/check.html

Username

Логин для HTTP-аутентификации

Password

Пароль для HTTP-аутентификации

CA certificate

Цепочка сертификатов для проверки доступности сервера по HTTPS

Certificate

Сертификат для проверки доступности сервера по HTTPS

Disable security check

Отключить проверку самоподписанных сертификатов

Важно

При использовании базовой HTTP-аутентификации логин и пароль передаются в открытом виде. При использовании проверок доступности по HTTPS пакет, содержащий эти данные, шифруется с помощью TLS.

Script

../../_images/hm_script.png

Поле

Описание

Type

python или shell

Value

Пользовательский скрипт, который выполняется в бесконечном цикле

File

Загрузить скрипт из файлового хранилища

Этот режим Health Monitor реализован в виде шаблона скрипта. При создании Worker (сервера) его специфические атрибуты и часть скрипта, определённая пользователем, добавляются к базовому шаблону.

Следующие константы доступны в скрипте:

  • TG – Target-группа

  • IP – IP-адрес сервера

  • PORT – Порт сервера

  • INTERVAL – Интервал (в секундах) между проверками

  • TIMEOUT – Время ожидания ответа от Worker

Эти константы можно использовать в пользовательском скрипте.

Пользователь должен определить часть скрипта, которая выполняется в бесконечном цикле. Скрипт может работать в одном из двух режимов:

Проверка статуса Worker (успех/неудача)

Вам не требуется реализовывать логику изменения статуса Worker или обработки порогов повторных попыток. Подсистема Health Monitoring обрабатывает эту логику.

Вы должны определить функцию (любое имя допустимо), которая возвращает одно из следующих значений для обозначения состояния Worker:

  • -1 – Успешная проверка

  • -2 – Неуспешная проверка

  • Любое другое отрицательное число или нечисловое значение – ошибка скрипта

Пример скрипта на Python

from subprocess import DEVNULL, STDOUT, check_call

def userscript() -> int:
    response = check_call(["ping" + f" -c 1 -W {TIMEOUT} {IP}"], shell=True, stdout=DEVNULL, stderr=STDOUT)
    if response == 0:
        return -1
    return -2

Пример скрипта на Shell

userscript() {
    if ping -c 1 -i $TIMEOUT $IP &> /dev/null
    then
        status=-1
    else
        status=-2
    fi
    echo $status
}

Возврат веса Worker

В этом режиме скрипт должен возвращать вес Worker. Вес может быть рассчитан внутри скрипта или получен из внешнего источника (например, от самого Worker). Возвращаемое значение 0 означает, что Worker считается недоступным.

Пример скрипта на Python

from subprocess import DEVNULL, STDOUT, check_call

def userscript() -> int:
    response = check_call(["ping" + f" -c 1 -W {TIMEOUT} {IP}"], shell=True, stdout=DEVNULL, stderr=STDOUT)
    if response == 0:
        return 200
    return 0

Пример скрипта на Shell

userscript() {
    if ping -c 1 -i $TIMEOUT $IP &> /dev/null
    then
        weight=200
    else
        weight=0
    fi

    return $weight
}

DNS

../../_images/hm_dns.png

Дополнительные параметры для DNS Health Monitor:

Поле

Описание

Domain

Доменное имя для опроса

Reply code

Код ответа DNS-сервера. Принимает значения в диапазоне от 0 до 5. По умолчанию – 0

Mode

Транспортный протокол для запросов к DNS-серверу (UDP или TCP). По умолчанию – UDP

Port

Порт для отправки DNS-запросов. Диапазон: 1-65535

Compound

../../_images/hm_compound.png

Дополнительные параметры для составного (compound) Health Monitor:

Поле

Описание

Health Monitors

Список Health Monitor, которые будут использоваться

Mode

Режим сравнения. And – все Health Monitor из списка должны успешно пройти проверку. Or – хотя бы один Health Monitor из списка должен успешно пройти проверку. Если не указано, используется And

LDAP(S)

../../_images/hm_ldap.png

Дополнительные параметры для LDAP Health Monitor:

Поле

Описание

Mode

Протокол для отправки запросов:

  • LDAP

  • LDAPS (enable-ldaps). Health Monitor сразу использует TLS-соединение на TCP-порту 636

  • LDAP over TLS (start-tls). Health Monitor сначала подключается по стандартному LDAP на TCP-порту 389, а затем пытается переключиться на TLS (порт не меняется). Если сервер поддерживает это, устанавливается TLS-сессия; в противном случае, в зависимости от настроек сервера, соединение продолжается по LDAP или закрывается

Port

Порт для подключения. Диапазон: 1-65535

Bind DN

Идентификатор для привязки к LDAP-серверу. FQDN + корневой контейнер, например, cn=admin,cn=users,dc=lab,dc=local

Auth mode

Метод аутентификации. При simple запрос привязки отправляет данные в открытом виде. При md5 пароль хешируется с использованием MD5

Password

Пароль для доступа к защищённому каталогу LDAP

Base DN

Базовое DN для операций поиска, например, cn=users,dc=lab,dc=local. Этот параметр обязателен

Request

Фильтр поиска: укажите атрибут объекта и его значение. Остальная часть DN берётся из Base DN, например, cn=test. Этот параметр обязателен

Search request matches check

По умолчанию успешное выполнение поискового запроса считается успешной проверкой состояния. Если необходимо проверить результат поиска (т.е. наличие объекта), включите эту опцию

CA certificate

Цепочка сертификатов для проверки доступности сервера по LDAPS и LDAP over TLS

Certificate

Сертификат для проверки доступности сервера по LDAPS и LDAP over TLS

Disable security check

Отключить проверку самоподписанных сертификатов