Upstream Probe#

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

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

server {
    listen ...;

    location @probes {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}

Директивы#

upstream_probe (PRO)#

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

Синтаксис

upstream_probe имя [uri=адрес] [port=число] [interval=время] [method=метод] [test=условие] [essential [persistent]] [fails=число] [passes=число] [max_body=размер] [mode=always | idle | onfail];

По умолчанию

Контекст

location

Задает активную проверку работоспособности серверов тех upstream, которые указаны в директивах proxy_pass, uwsgi_pass и т. д. в том же контексте location, где находится директива upstream_probe. При этом Angie регулярно выполняет запросы согласно указанным параметрам к каждому серверу в составе апстрима.

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

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

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

имя

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

uri

URI запроса, который добавляется к аргументу proxy_pass, uwsgi_pass и т. д.
По умолчанию — /.

port

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

interval

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

method

HTTP-метод запроса проверки.
По умолчанию — GET.

test

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

essential

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

persistent

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

fails

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

passes

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

max_body

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

mode

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

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

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

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

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

Пример:

upstream backend {
    zone backend 1m;

    server backend1.example.com;
    server backend2.example.com;
}

map $upstream_status $good {
    200     "1";
}

server {
    listen ...;

    location @probes {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            persistent
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}

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

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

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

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

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

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

$upstream_probe (PRO)#

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

$upstream_probe_body (PRO)#

Тело ответа от сервера, полученного при проверке upstream_probe. Его размер ограничен параметром max_body.