10.4.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 из списка
Настройка¶
- vlb health-monitor NAME type <icmp|tcp|udp|http|https|script|dns|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
.
Show команды¶
- show vlb health-monitor¶
Показывает все созданные Health Monitor и их параметры.
- show vlb health-monitor NAME¶
Показывает параметры указанного Health Monitor.