Модуль http_upstream_probe
#
Реализует активные проверки работоспособности (health probes) для http_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)#
Added in version 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 запроса, который добавляется к аргументу proxy_pass,
uwsgi_pass и т. д. |
|
Альтернативный порт для запроса. |
|
Интервал между проверками. |
|
HTTP-метод запроса проверки. |
|
Проверяемое при запросе условие; задается строкой с переменными.
Если результат подстановки переменных — |
|
Если параметр задан, то изначально состояние сервера подлежит уточнению и клиентские запросы не передаются ему, пока проверка не будет пройдена. |
|
Установка этого параметра требует сначала включить |
|
Число последовательных неуспешных запросов,
при котором проверка считает сервер неработающим. |
|
Число последовательных успешных запросов,
при котором проверка считает сервер работающим. |
|
Максимальный объем памяти для тела ответа. |
|
Режим проверки в зависимости от работоспособности серверов:
По умолчанию — |
Пример:
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
.