CLI¶
Обзор¶
Health Monitor используется для проверки доступности Workers. На основе конфигурации каждого Health Monitor можно определить гибкие правила мониторинга доступности серверов для вывода недоступных серверов из пула балансировки или их восстановления при возобновлении работы.
Кроме стандартных режимов работы, вы можете создавать собственные скрипты проверки.
Для проверки доступности серверов используются следующие методы:
- TCP
Доступность проверяется путём установления TCP-соединения между ADC и IP:port Worker. Проверка считается успешной, если:
ADC отправляет SYN указанному Worker,
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
hostHOSTИмя хоста в заголовке HTTP. Например,
trafficsoft.ruport(0-65535)Порт хоста в заголовке HTTP
request-method<get|post|head>Метод HTTP-запроса согласно RFC 7231#4.3. Поддерживаемые методы: GET, POST и HEAD
pathPATHПуть. По умолчанию —
/. Можно использовать для проверки конкретного 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
hostHOSTИмя хоста в заголовке HTTP. Например,
trafficsoft.ruport(0-65535)Порт хоста в заголовке HTTP
request-method<get|post|head>Метод HTTP-запроса согласно RFC 7231#4.3. Поддерживаемые методы: GET, POST и HEAD
pathPATHПуть. По умолчанию —
/. Можно использовать для проверки конкретного URL, например,/checker/check.htmlca-certificateNAMEЦепочка сертификатов для проверки доступности сервера по HTTPS
certificateNAMEСертификат для проверки доступности сервера по 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— NoError1— FormErr2— ServFail3— NXDomain4— NotImp5— 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 (или указанный) и их параметры.