10.6.2. CLI¶
Описание¶
Health Monitoring необходим для проверки доступности серверов (Workers). С учетом настроек каждого health checker Вы можете создать гибкие правила проверок серверов для оперативного их выведения из балансировки и обратного включения.
Кроме стандартных способов проверки работы есть возможность создания собственных скриптов.
Для проверки доступности серверов используются следующие способы:
- TCP
Проверка доступности осуществляется путем установления TCP-соединения между балансировщиком и сервером (Worker). Проверка считается пройденной, если: 1. Балансировщик отправляет SYN указанному серверу, 2. Балансировщик получает ACK от указанного сервера.
- UDP
Проверка доступности осуществляется с помощью отправки UDP-запроса на IP:port сервера. Проверка считается пройденной, если health checker получил успешный ответ, либо не получил ничего. Если получена ошибка, то Worker выводится из балансировки.
- ICMP
Проверка доступности Worker осуществляется с помощью ICMP echo request. Проверка считается пройденной, если балансировщиком получен ICMP-reply от Worker.
- HTTP
Проверка доступности осуществляется с помощью HTTP-запроса к серверу. При этом в качестве параметров можно указать:
код ответа сервера
тело HTTP-ответа
название хоста
порт хоста
метод HTTP-запроса
путь запроса
- HTTPS
Проверка доступности осуществляется с помощью HTTPS-запроса. К вышеуказанным параметрам добавляются:
цепочка сертификатов
сертификат
возможность отключения проверки использования самоподписанных сертификатов
- Script
Проверка доступности осуществляется с помощью пользовательских скриптов
- DNS
Проверка доступности осуществляется с помощью DNS-запросов (по UDP или TCP) к DNS-серверу
- Compound
Проверка доступности осуществляется с помощью последовательной проверки 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-checker для одного из способов проверки.
- no service health-monitor enable¶
Отключить сервис Health Monitor. По умолчанию он включен и данная команда не отображается в конфигурации.
Для каждого способа есть свои команды настройки 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)|expect-body BODY|host HOST|port (0-65535)|request-method <get|post|head>|path PATH}¶
Создать метод проверки по следующим параметрам:
Ключ
Параметр
Описание
expect-code
(100-599)
Код, который мы ожидаем в ответе от сервера. По умолчанию 200. Со списком кодов можно ознакомиться в RFC 7231#6.1
expect-body
BODY
Тело HTTP-ответа, который мы ожидаем от сервера в кодировке Base64. Например, если мы ожидаем ответ
<html><body><h1>Server1</h1></body></html>
, то конвертировать необходимо всю эту строчкуPGh0bWw+PGJvZHk+PGgxPlNlcnZlcjE8L2gxPjwvYm9keT48L2h0bWw+
host
HOST
Название хоста в HTTP-заголовке. Например,
trafficsoft.ru
port
(0-65535)
Порт хоста в HTTP-заголовке
request-method
<get|post|head>
Метод HTTP-запроса согласно RFC 7231#4.3. Доступны методы GET, POST и HEAD
path
PATH
Путь. По умолчанию
/
. Можно опрашивать не только главную страницу WEB-сервера, но какой-то конкретный URL. Например,/checker/check.html
- http expect-body import-terminal¶
Задать тело HTTP-ответа, который мы ожидаем от сервера, через терминал. После нажатия
Enter
система попросит ввести текст, далее еще раз для потверждения. Перекодировать текст в Base64 не нужно, он будет перекодирован автоматически.
- http authentication username NAME [password PASSWORD|password encoded PASSWORD]¶
Задать логин и пароль в случае, если осуществляется проверка страницы, требующей авторизации.
HTTPS¶
- https {expect-code (100-599)|expect-body BODY|host HOST|port (0-65535)|request-method <get|post|head>|path PATH|ca-certificate NAME|certificate NAME|disable-security-check}¶
Создать метод проверки по следующим параметрам:
Ключ
Параметр
Описание
expect-code
(100-599)
Код, который мы ожидаем в ответе от сервера. По умолчанию 200. Со списком кодов можно ознакомиться в RFC 7231#6.1
expect-body
BODY
Тело HTTP-ответа, который мы ожидаем от сервера в кодировке Base64. Например, если мы ожидаем ответ
<html><body><h1>Server1</h1></body></html>
, то конвертировать необходимо всю эту строчкуPGh0bWw+PGJvZHk+PGgxPlNlcnZlcjE8L2gxPjwvYm9keT48L2h0bWw+
host
HOST
Название хоста в HTTP-заголовке. Например,
trafficsoft.ru
port
(0-65535)
Порт хоста в HTTP-заголовке
request-method
<get|post|head>
Метод HTTP-запроса согласно RFC 7231#4.3. Доступны методы GET, POST и HEAD
path
PATH
Путь. По умолчанию
/
. Можно опрашивать не только главную страницу WEB-сервера, но какой-то конкретный URL. Например,/checker/check.html
ca-certificate
NAME
Цепочка сертификатов, используемых для проверки доступности сервера по HTTPS. Цепочка сертификатов создается в разделе CLI
certificate
NAME
Сертификат, используемый для проверки доступности сервера по HTTPS. Сертификат создается в разделе CLI
disable-security-check
Отключить проверку на использование самоподписанных сертификатов
- https expect-body import-terminal¶
Задает тело HTTP-ответа, который мы ожидаем от сервера, через терминал. После нажатия
Enter
система попросит ввести текст, далее еще раз для потверждения. Перекодировать текст в Base64 не нужно, он будет перекодирован автоматически.
- https authentication username NAME [password PASSWORD|password encoded PASSWORD]¶
Задает логин и пароль в случае, если проверка осуществляется страницы, требующей авторизации.
Script¶
- script {type <python|shell>|value VALUE}¶
Создает метод проверки на основе пользовательского скрипта написанного на Python или Shell. В качестве значения указывается текст в кодировке Base64.
- script import file NAME¶
Позволяет загрузить пользовательский скрипт из файла. В качестве пути необходимо указывать домашнюю директорию пользователя, например,
/home/admin/
.
Реализация этого способа Health Monitor представляет собой шаблон уже готового скрипта, в который при создании Worker (сервера) добавляется пользовательская часть скрипта, а также атрибуты конкретного сервера в качестве констант:
TG
- Target-группаIP
- IP-адрес сервераPORT
- Порт сервераINTERVAL
- Интервал (в секундах) между попытками проверкиTIMEOUT
- Время ожидания ответа от Worker в секундах
Константы могут использоваться в пользовательской части скрипта.
Custom script health check позволяет запускать скрипты двух типов:
Python script
Shell script
От пользователя требуется написать часть скрипта, которая далее будет выполняться в бесконечном цикле.
Скрипт может быть написан для работы в двух режимах:
Успех/неуспех проверки воркера¶
Пользователю не требуется реализовывать часть с логикой по изменению статуса Worker и реакцию на срабатывание пороговых значений. Эта логика остается на стороне подсистемы Health Monitoring.
Пользователю необходимо в своем скрипте написать функцию (имя функции может быть любым), которая будет возвращать несколько возможных значений, которые указывают на состояние сервера:
-1 - успешная проверка;
-2 - неуспешная проверка;
Любое другое отрицательное значение, либо буквенные символы - ошибка в ходе запуска проверки.
Пример Script code на 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
Пример Script code на shell
userscript() {
if ping -c 1 -i $TIMEOUT $IP &> /dev/null
then
status=-1
else
status=-2
fi
echo $status
}
Возврат веса Worker¶
В скрипте должен возвращаться вес Worker, который должен быть подсчитан самостоятельно, либо получен из внешнего источника (например, от Worker). Возвращаемое значение должно равняться весу Worker. Вес 0 означает переход Worker в нерабочее состояние.
Пример Script code на 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
Пример Script code на shell
userscript() {
if ping -c 1 -i $TIMEOUT $IP &> /dev/null
then
weight=0
else
weight=200
fi
return $weight
}
DNS¶
- dns domain DOMAIN¶
Название домена для опроса.
- dns mode tcp¶
Протокол, по которому будут отправляться DNS-запросы. По умолчанию UPD.
- dns port (0-65535)¶
Порт, на который будут отправляться DNS-запросы.
- dns reply-code (0-5)¶
Код ответа от DNS-сервера для прохождения успешной проверки.
Compound¶
- compound health-monitors LINE...¶
Создать список Health Monitor, по которым будет осуществляться проверка. Названия Health Monitor должны быть отделены пробелом.
- compound mode [<and|or>]¶
Выбрать режим сравнения. По умолчанию используется
and
.
LDAP(S)¶
- ldap bind-dn NAME¶
Задать идентификатор для привязки к LDAP-серверу. Соответствует FQDN + root контейнер, например,
cn=admin,cn=users,dc=lab,dc=local
.
- ldap enable-ldaps¶
LDAPS (enable-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¶
Настройка поисковых запросов. Указывается атрибут объекта и его значение. Остальная часть пути испольуется из BaseDN, например,
cn=test
. Данный параметр является обязательным.
- ldap search matches-check¶
По умолчанию, успешный статус выполнение запроса на поиск является успешной проверкой health checker. Если требуется проверять результат поиска (наличие объекта), то используется данная опция.
- 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¶
Показывает все созданные Health Monitor и их параметры.
- show vlb health-monitor NAME¶
Показывает параметры указанного Health Monitor.