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.