10.4.1. WEB

Описание

Health Monitoring необходим для проверки доступности серверов (Workers). С учетом настроек каждого Health Monitor Вы можете создать гибкие правила проверок серверов для оперативного их выведения из балансировки и обратного включения.

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

Настройка

Перейдите в Traffic Management -> Health Monitoring.

../../_images/hm_main_window.png

Для того, чтобы создать Health Monitor, нажмите на кнопку Add.

Для того, чтобы удалить Health Monitor, выберите нужный, нажав на чекбокс напротив имени Health Monitor, далее нажмите на кнопку Delete или в колонке Actions на иконку корзины.

Для того, чтобы обновить список Health Monitor, нажмите на кнопку Refresh.

Примечание

Вы можете удалить все Health Monitor. Для этого нажмите на чекбокс напротив колонки Name, и далее на Delete

Есть несколько режимов работы Health Monitor:

TCP, UDP, ICMP

TCP

Проверка доступности осуществляется путем установления TCP-соединения между балансировщиком и сервером (Worker). Проверка считается пройденной, если:

  1. Балансировщик отправляет SYN указанному серверу,

  2. Балансировщик получает ACK от указанного сервера.

UDP

Проверка доступности осуществляется с помощью отправки UDP-запроса на IP:port сервера. Проверка считается пройденной, если health checker получил успешный ответ, либо не получил ничего. Если получена ошибка, то Worker выводится из балансировки.

ICMP

Проверка доступности Worker осуществляется с помощью ICMP echo request. Проверка считается пройденной, если балансировщиком получен ICMP-reply от Worker.

Поля для всех трех режимов одинаковые. Внутри полей даются их определение:

../../_images/hm_tcp_upd_icmp.png

Поле

Описание

Name

Название Health Monitor

Режим

tcp, upd, icmp

Interval

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

Response Timeout

Время ожидания ответа от Worker в секундах. По умолчанию 5 секунд

Up Retries

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

Down Retries

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

HTTP

../../_images/hm_http.png

HTTPS

../../_images/hm_https.png

Поле

Описание

Name

Название Health Monitor

Режим

https

Interval

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

Response Timeout

Время ожидания ответа от Worker в секундах. По умолчанию 5 секунд

Up Retries

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

Down Retries

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

CA certificate

Цепочка сертификатов, используемых для проверки доступности сервера по HTTPS. Цепочка сертификатов создается в разделе WEB

Certificate

Сертификат, используемый для проверки доступности сервера по HTTPS. Сертификат создается в разделе WEB

Disable SSL security check

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

Expect code

Код, который мы ожидаем в ответе от сервера. По умолчанию 200. Со списком кодов можно ознакомиться в RFC 7231#6.1

Expect body

Тело HTTP-ответа, который мы ожидаем от сервера. Например, <html><body><h1>Server1</h1></body></html>

Host

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

Port

Порт хоста в HTTP-заголовке. Диапазон от 1 до 65534

Request method

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

Path

Путь. По умолчанию, /. Можно опрашивать не только главную страницу WEB-сервера, но какой-то конкретный URL. Например, /checker/check.html

Script

../../_images/hm_script.png

Поле

Описание

Name

Название Health Monitor

Режим

script

Interval

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

Response Timeout

Время ожидания ответа от Worker в секундах. По умолчанию 5 секунд

Up Retries

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

Down Retries

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

Script type

python или shell

Script code

Пользовательская часть кода, которая будет выполняться в бесконечном цикле

Реализация этого режима Health Monitor представляет собой шаблон уже готового скрипта, в который при создании Worker (сервера) добавляется пользовательская часть скрипта, а также атрибуты конкретного сервера в качестве констант:

  • TG - Target-группа

  • IP - IP-адрес сервера

  • PORT - Порт сервера

  • INTERVAL - Интервал (в секундах) между попытками проверки

  • TIMEOUT - Время ожидания ответа от Worker в секундах

Константы могут использоваться в пользовательской части скрипта.

От пользователя требуется написать часть скрипта, которая далее будет выполняться в бесконечном цикле.

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

Успех/неуспех проверки воркера

Пользователю не требуется реализовывать часть с логикой по изменению статуса 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

../../_images/hm_dns.png

Поле

Описание

Name

Название Health Monitor

Режим

dns

Interval

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

Response Timeout

Время ожидания ответа от Worker в секундах. По умолчанию 5 секунд

Up Retries

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

Down Retries

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

DNS domain query

Название домена для опроса

DNS reply code

Код ответа DNS-сервера. Можно указать диапазон от 0 до 5. По умолчанию 0

DNS transport protocol

Транспортный протокол (UDP или TCP), использующийся для проверки DNS-сервера. По умолчанию UDP

DNS port

Порт, на который будут приходить DNS-запросы. Диапазон от 1 до 65535

Compound

../../_images/hm_compound.png

Поле

Описание

Name

Название Health Monitor

Режим

compound

Interval

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

Response Timeout

Время ожидания ответа от Worker в секундах. По умолчанию 5 секунд

Up Retries

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

Down Retries

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

Compound: list of Health-Monitor

Список Health Monitor, которые будут использоваться

Compound mode

Режим сравнения. And — проверка должна быть успешной у всех Health Monitor из списка. Or — проверка должна быть успешной хотя бы у одного Health Monitor из списка. Если не указывать режим, то по умолчанию будет использоваться And