Upstream Probe#
Реализует активные проверки работоспособности (health probes)
для Upstream. Добавлено в версии 1.2.0: PRO По умолчанию — location Задает активную проверку работоспособности серверов тех upstream,
которые указаны в директивах proxy_pass, uwsgi_pass и т. д.
в том же контексте Сервер проходит проверку, если запрос к нему успешно выполняется с учетом всех
параметров самой директивы Чтобы использовать проверки,
в апстриме необходима зона разделяемой памяти (zone).
Для одного апстрима можно определить несколько проверок. Могут быть заданы следующие параметры: Обязательное имя проверки. URI запроса, который добавляется к аргументу proxy_pass,
uwsgi_pass и т. д. Альтернативный порт для запроса. Интервал между проверками. HTTP-метод запроса проверки. Проверяемое при запросе условие; задается строкой с переменными.
Если результат подстановки переменных — Если параметр задан, то изначально состояние сервера подлежит уточнению
и клиентские запросы не передаются ему, пока проверка не будет пройдена. Установка этого параметра требует сначала включить Число последовательных неуспешных запросов,
при котором проверка считает сервер неработающим. Число последовательных успешных запросов,
при котором проверка считает сервер работающим. Максимальный объем памяти для тела ответа. Режим проверки в зависимости от работоспособности серверов: По умолчанию — Пример: Детали работы: Изначально сервер не получает клиентские запросы,
пока не пройдет все заданные для него проверки с параметром Сервер считается неработающим и не получает клиентские запросы,
если какая-либо заданная для него проверка достигает своего порога Чтобы неработающий сервер снова мог считаться работающим,
все заданные для него проверки должны достичь своего порога Модуль Имя активной сейчас проверки upstream_probe. Тело ответа от сервера,
полученного при проверке upstream_probe.
Его размер ограничен параметром Пример конфигурации#
server {
listen ...;
location /backend {
...
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)#
upstream_probe
имя [uri=
адрес] [port=
число] [interval=
время] [method=
метод] [test=
условие] [essential
[persistent
]] [fails=
число] [passes=
число] [max_body=
размер] [mode=
always
| idle
| onfail
];location
, где находится директива upstream_probe
.
При этом Angie регулярно выполняет запросы согласно указанным параметрам
к каждому серверу в составе апстрима.upstream_probe
и всех параметров, влияющих на
использование апстримов тем контекстом location
, где она задана. Это
касается в том числе директив proxy_next_upstream,
uwsgi_next_upstream и пр., а также proxy_set_header и т. д.имя
uri
По умолчанию — /
.port
interval
По умолчанию — 5s
.method
По умолчанию — 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 /backend {
...
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_body
(PRO)#max_body
.