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
|
|
По умолчанию |
— |
server |
Задает активную проверку работоспособности серверов апстрима, указанного в директиве proxy_pass в том же
контексте server
, где находится директива upstream_probe
.
Сервер проходит проверку, если запрос к нему успешно выполняется с учетом
всех параметров самой директивы upstream_probe
и всех параметров,
влияющих на использование апстримов тем контекстом server
, где она
задана, в том числе директивы proxy_next_upstream.
Чтобы использовать проверки, в апстриме необходима зона разделяемой памяти (zone). Для одного апстрима можно определить несколько проверок.
Могут быть заданы следующие параметры:
|
Обязательное имя проверки. |
|
Альтернативный порт для запроса. |
|
Интервал между проверками. |
|
Проверяемое при запросе условие; задается строкой из переменных.
Если результат подстановки всех переменных — |
|
Если параметр задан, то изначально состояние сервера подлежит уточнению и клиентские запросы не передаются ему, пока проверка не будет пройдена. |
|
Установка этого параметра требует сначала включить |
|
Число последовательных неуспешных запросов,
при котором проверка считает сервер неработающим. |
|
Число последовательных успешных запросов,
при котором проверка считает сервер работающим. |
|
Максимальный объем памяти для ответа. Если задано нулевое
значение, ожидание ответа отключается. |
|
Режим проверки в зависимости от работоспособности серверов:
По умолчанию — |
|
Если параметр указан, используется протокол UDP. По умолчанию для проверок используется TCP. |
|
Отправляемые для проверки данные;
это может быть строка с префиксом |
Пример:
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.