CLI

Обзор

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

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

Для проверки доступности серверов используются следующие методы:

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

Доступность проверяется с помощью HTTP-запроса к серверу. Вы можете задать следующие параметры:

  • Код ответа

  • Тело HTTP-ответа

  • Имя хоста

  • Порт хоста

  • Метод HTTP-запроса

  • Путь запроса

HTTPS

Доступность проверяется с использованием HTTPS-запроса. Кроме параметров, перечисленных выше, можно задать следующие:

  • Цепочка сертификатов

  • Сертификат

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

Примечание

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

Скрипт

Доступность проверяется с использованием пользовательских скриптов.

DNS

Доступность проверяется путём отправки DNS-запросов (через UDP или TCP) на DNS-сервер.

Составной

Доступность проверяется последовательным запуском Health Monitor из определённого списка. Доступны два режима сравнения:

  • And — все Health Monitor из списка должны успешно пройти проверку

  • Or — проверка должна быть успешной хотя бы у одного Health Monitor из списка

LDAP(S)

Доступность проверяется с помощью запросов к каталогу LDAP. Поддерживаются три режима:

  • LDAP

  • LDAPS

  • LDAP over TLS

Настройка

vlb health-monitor NAME type <icmp|tcp|udp|http|https|script|dns|ldap|compound>

Создать Health Monitor для одного из доступных методов.

no service health-monitor enable

Отключить службу Health Monitor. Она включена по умолчанию, и эта команда не отображается в конфигурации.

Следующие команды общие для всех типов мониторинга доступности:

interval (1-300)

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

timeout (2-60)

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

up-retries (1-10)

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

down-retries (1-10)

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

HTTP

http {expect-code (100-599)|host HOST|port (0-65535)|request-method <get|post|head>|path PATH}

Создать HTTP Health Monitor со следующими параметрами:

Ключ

Параметр

Описание

expect-code

(100-599)

Ожидаемый код ответа от Worker. По умолчанию — 200. Полный список доступен в RFC 7231#6.1

host

HOST

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

port

(0-65535)

Порт хоста в заголовке HTTP

request-method

<get|post|head>

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

path

PATH

Путь. По умолчанию — /. Можно использовать для проверки конкретного URL, например, /checker/check.html

http expect-body BODY

Задать ожидаемое тело HTTP-ответа, закодированное в Base64. Например, если ожидаемый ответ — <html><body><h1>Server1</h1></body></html>, закодированное значение должно быть PGh0bWw+PGJvZHk+PGgxPlNlcnZlcjE8L2gxPjwvYm9keT48L2h0bWw+

http expect-body import-terminal

Задать ожидаемое тело HTTP-ответа через терминал. После нажатия Enter система предложит ввести текст и подтвердить его. Кодирование в Base64 не требуется — система закодирует его автоматически.

http authentication username USERNAME {password PASSWORD|password encoded PASSWORD}

Задать логин и пароль, если проверяемая страница требует аутентификации.

HTTPS

https {expect-code (100-599)|host HOST|port (0-65535)|request-method <get|post|head>|path PATH|ca-certificate NAME|certificate NAME|disable-security-check}

Создать HTTPS Health Monitor со следующими параметрами:

Ключ

Параметр

Описание

expect-code

(100-599)

Ожидаемый код ответа от Worker. По умолчанию — 200. Полный список доступен в RFC 7231#6.1

host

HOST

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

port

(0-65535)

Порт хоста в заголовке HTTP

request-method

<get|post|head>

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

path

PATH

Путь. По умолчанию — /. Можно использовать для проверки конкретного URL, например, /checker/check.html

ca-certificate

NAME

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

certificate

NAME

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

disable-security-check

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

https expect-body BODY

Задать ожидаемое тело HTTPS-ответа, закодированное в Base64. Например, если ожидаемый ответ — <html><body><h1>Server1</h1></body></html>, закодированное значение должно быть PGh0bWw+PGJvZHk+PGgxPlNlcnZlcjE8L2gxPjwvYm9keT48L2h0bWw+

https expect-body import-terminal

Задать ожидаемое тело HTTPS-ответа через терминал. После нажатия Enter система предложит ввести текст и подтвердить его. Кодирование в Base64 не требуется — система закодирует его автоматически.

https authentication username USERNAME {password PASSWORD|password encoded PASSWORD}

Задать логин и пароль, если проверяемая страница требует аутентификации.

Скрипт

script {type <python|shell>|value VALUE}

Создать Health Monitor на основе пользовательского скрипта на Python или Shell. Значение должно быть закодировано в Base64.

script import file NAME

Загрузить пользовательский скрипт из файла. Файл должен находиться в домашнем каталоге пользователя, например, /home/admin/.

Этот режим 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

dns domain DOMAIN

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

dns mode tcp

Протокол для отправки DNS-запросов. По умолчанию — UDP.

dns port (1-65535)

Порт, на который будут отправляться DNS-запросы.

dns reply-code (0-5)

Код ответа DNS-сервера, необходимый для успешной проверки:

  • 0 — NoError

  • 1 — FormErr

  • 2 — ServFail

  • 3 — NXDomain

  • 4 — NotImp

  • 5 — Refused

Составной

compound health-monitors LINE...

Определить список Health Monitor, которые будут использоваться для проверки. Имена должны быть разделены пробелами.

compound mode [<and|or>]

Выбрать режим сравнения. По умолчанию — and.

LDAP(S)

ldap bind-dn NAME [{auth-mode <simple|md5>|password PASSWORD}]

Задать уникальное имя (DN) для привязки к LDAP-серверу с параметрами аутентификации и пароля. Должно включать FQDN и корневой контейнер, например, cn=admin,cn=users,dc=lab,dc=local.

ldap enable-ldaps

Включить LDAPS. Health Monitor сразу использует подключение по TLS на TCP-порту 636.

ldap port (0-65535)

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

ldap search base-dn

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

ldap search request

Настройка поисковых запросов. Укажите атрибут объекта и его значение. Остальная часть пути берётся из базового DN, например, cn=test. Этот параметр обязателен.

ldap search matches-check

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

ldap start-tls

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

ldap tls-client ca-certificate NAME

Добавить цепочку сертификатов, используемую для проверки доступности сервера по LDAPS и LDAP over TLS.

ldap tls-client certificate

Добавить сертификат, используемый для проверки доступности сервера по LDAPS и LDAP over TLS.

ldap tls-client disable-security-check

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

Show-команды

show vlb health-monitor [NAME]

Показать все созданные Health Monitor (или указанный) и их параметры.