Upstream Probe#

Реализует активные проверки работоспособности (health probes) для Upstream.

Пример конфигурации#

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\n\n";
}

Директивы#

upstream_probe (PRO)#

Добавлено в версии 1.4.0: PRO

Синтаксис

upstream_probe имя [port=число] [interval=время] [test=условие] [essential] [fails=число] [passes=число] [max_response=размер] [mode=always|idle|onfail] [udp] [send=строка];

По умолчанию

Контекст

server

Задает активную проверку работоспособности серверов апстрима, указанного в директиве proxy_pass в том же контексте server, где находится директива upstream_probe.

Сервер проходит проверку, если запрос к нему успешно выполняется с учетом всех параметров самой директивы upstream_probe и всех параметров, влияющих на использование апстримов тем контекстом server, где она задана, в том числе директивы proxy_next_upstream.

Чтобы использовать проверки, в апстриме необходима зона разделяемой памяти (zone). Для одного апстрима можно определить несколько проверок.

Могут быть заданы следующие параметры:

имя

Обязательное имя проверки.

port

Альтернативный порт для запроса.

interval

Интервал между проверками.
По умолчанию — 5s.

test

Проверяемое при запросе условие; задается строкой из переменных. Если результат подстановки всех переменных — "" или "0", проверка не пройдена.

essential

Если параметр задан, то изначально состояние сервера подлежит уточнению и клиентские запросы не передаются ему, пока проверка не будет пройдена.

persistent

Установка этого параметра требует сначала включить essential; серверы с persistent, работавшие до перезагрузки конфигурации, начинают получать запросы без необходимости сначала пройти эту проверку.

fails

Число последовательных неуспешных запросов, при котором проверка считает сервер неработающим.
По умолчанию — 1.

passes

Число последовательных успешных запросов, при котором проверка считает сервер работающим.
По умолчанию — 1.

max_response

Максимальный объем памяти для ответа. Если задано нулевое значение, ожидание ответа отключается.
По умолчанию — 256k.

mode

Режим проверки в зависимости от работоспособности серверов:

  • always — серверы проверяются независимо от состояния;

  • idle — проверяются неработающие серверы, а также серверы, где с последнего клиентского запроса прошло время interval.

  • onfail — проверяются серверы только в неработающем состоянии.

По умолчанию — always.

udp

Если параметр указан, используется протокол UDP. По умолчанию для проверок используется TCP.

send

Отправляемые для проверки данные; это может быть строка с префиксом data: или имя файла с данными (задается абсолютно или относительно каталога /usr/local/angie/).

Пример:

upstream backend {
    zone backend 1m;

    server a.example.com;
    server b.example.com;
}

map $upstream_probe_response $good {
    ~200    "1";
    default  "";
}

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        persistent
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\n\n";
}

Детали работы:

  • Изначально сервер не получает клиентские запросы, пока не пройдет все заданные для него проверки с параметром essential (пропуская помеченные как persistent, если конфигурация перезагружена и до этого сервер считался работающим). Если таких проверок нет, сервер считается работающим.

  • Сервер считается неработающим и не получает клиентские запросы, если какая-либо заданная для него проверка достигает своего порога fails или сам сервер достигает порога max_fails.

  • Чтобы неработающий сервер снова мог считаться работающим, все заданные для него проверки должны достичь своего порога passes; после этого учитывается порог max_fails.

Встроенные переменные#

Модуль stream_upstream поддерживает следующие встроенные переменные:

$upstream_probe (PRO)#

Имя активной сейчас проверки upstream_probe.

$upstream_probe_response (PRO)#

Содержимое ответа, полученного в ходе активной проверки upstream_probe.