Проверки работоспособности серверов#
Angie ADC включает пассивные и активные проверки работоспособности серверов (health probes). Если сервер начинает отвечать с ошибками, Angie ADC временно исключает его из пула доступных серверов. Пример: В этой конфигурации сервер помечается как недоступный после двух неудачных запросов подряд ( Директива Сервер проходит проверку, если запрос к нему успешно выполняется с учетом всех
параметров самой директивы Чтобы использовать проверки,
в апстриме необходима зона разделяемой памяти ( Синтаксис По умолчанию — Контекст location Обязательное имя проверки. URI запроса, который добавляется к аргументу Альтернативный порт для запроса. Интервал между проверками. По умолчанию — HTTP-метод запроса проверки. По умолчанию — Проверяемое при запросе условие; задается строкой с переменными.
Если результат подстановки переменных — Если параметр задан, то изначально состояние сервера подлежит уточнению
и клиентские запросы не передаются ему, пока проверка не будет пройдена. Установка этого параметра требует сначала включить Число последовательных неуспешных запросов,
при котором проверка считает сервер неработающим.
По умолчанию — 1. Число последовательных успешных запросов,
при котором проверка считает сервер работающим.
По умолчанию — 1. Максимальный объем памяти для тела ответа.
По умолчанию — Режим проверки в зависимости от работоспособности серверов: По умолчанию — Модуль Изначально сервер не получает клиентские запросы,
пока не пройдет все заданные для него проверки с параметром Сервер считается неработающим и не получает клиентские запросы,
если какая-либо заданная для него проверка достигает своего порога Чтобы неработающий сервер снова мог считаться работающим,
все заданные для него проверки должны достичь своего порога Директива Сервер проходит проверку, если запрос к нему успешно выполняется с учетом
всех параметров самой директивы Чтобы использовать проверки,
в апстриме необходима зона разделяемой памяти.
Для одного апстрима можно определить несколько проверок. Синтаксис По умолчанию — Контекст server Примечание Согласно спецификации RFC 2616 (HTTP/1.1) и RFC 9110 (HTTP Semantics),
заголовки HTTP должны разделяться последовательностью CRLF ( Обязательное имя проверки. Альтернативный порт для запроса. Интервал между проверками. Проверяемое при запросе условие; задается строкой из переменных.
Если результат подстановки всех переменных — Если параметр задан, то изначально состояние сервера подлежит уточнению
и клиентские запросы не передаются ему, пока проверка не будет пройдена. Установка этого параметра требует сначала включить Число последовательных неуспешных запросов,
при котором проверка считает сервер неработающим. Число последовательных успешных запросов,
при котором проверка считает сервер работающим. Максимальный объем памяти для ответа. Если задано нулевое
значение, ожидание ответа отключается. Режим проверки в зависимости от работоспособности серверов: По умолчанию — Если параметр указан, используется протокол UDP.
По умолчанию для проверок используется TCP. Отправляемые для проверки данные;
это может быть строка с префиксом Модуль Изначально сервер не получает клиентские запросы,
пока не пройдет все заданные для него проверки с параметром Сервер считается неработающим и не получает клиентские запросы,
если какая-либо заданная для него проверка достигает своего порога Чтобы неработающий сервер снова мог считаться работающим,
все заданные для него проверки должны достичь своего порога Пассивные проверки#
upstream myapp1 {
server srv1.example.com max_fails=2 fail_timeout=10s;
server srv2.example.com;
server srv3.example.com;
}
max_fails=2
).
Через десять секунд сервер снова проверяется на доступность (fail_timeout=10s
).
Если он восстановился, запросы снова начинают отправляться на этот сервер.Активные проверки для HTTP#
upstream_probe
задает активную проверку работоспособности серверов тех u_upstream
,
которые указаны в директивах proxy_pass
, uwsgi_pass
и т. д.
в том же контексте location
, где находится директива upstream_probe
.
При этом Angie ADC регулярно выполняет запросы согласно указанным параметрам
к каждому серверу в составе апстрима.upstream_probe
и всех параметров, влияющих на
использование апстримов тем контекстом location
, где она задана. Это
касается в том числе директив proxy_next_upstream
,
uwsgi_next_upstream
и пр., а также proxy_set_header
и т. д.zone
).
Для одного апстрима можно определить несколько проверок.upstream_probe
имя [uri=
адрес] [port=
число] [interval=
время] [method=
метод] [test=
условие] [essential
[persistent
]] [fails=
число] [passes=
число] [max_body=
размер] [mode=
always
| idle
| onfail
];Пример#
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;
}
}
Параметры#
имя
uri
proxy_pass
,
uwsgi_pass
и т. д. По умолчанию — /
.port
interval
5s
.method
GET
.test
""
или "0"
,
проверка не пройдена.essential
persistent
essential
;
серверы с persistent
, работавшие до
перезагрузки конфигурации,
начинают получать запросы без необходимости сначала пройти эту проверку.fails
passes
max_body
256k
.mode
always
— серверы проверяются независимо от состояния;idle
— проверяются неработающие серверы, а также серверы,
где с последнего клиентского запроса прошло время interval
.onfail
— проверяются серверы только в неработающем состоянии.always
.Встроенные переменные#
http_upstream_probe
поддерживает следующие встроенные переменные:$upstream_probe
: имя активной сейчас проверки upstream_probe
.$upstream_probe_body
: тело ответа от сервера,
полученного при проверке upstream_probe
.
Его размер ограничен параметром max_body
.Детали работы#
essential
(пропуская помеченные как persistent
, если конфигурация перезагружена
и до этого сервер считался работающим).
Если таких проверок нет, сервер считается работающим.fails
или сам сервер достигает порога max_fails
.passes
;
после этого учитывается порог max_fails
.Активные проверки для TCP/UDP#
upstream_probe
задает активную проверку работоспособности серверов апстрима,
указанного в директиве proxy_pass
в том же
контексте server
, где находится директива upstream_probe
.upstream_probe
и всех параметров,
влияющих на использование апстримов тем контекстом server
, где она
задана, в том числе директивы proxy_next_upstream
.upstream_probe
имя [port=
число] [interval=
время] [test=
условие] [essential
[persistent
]] [fails=
число] [passes=
число] [max_response=
размер] [mode=
always
| idle
| onfail
] [udp
] [send=
строка];Пример#
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";
}
rn
), а
не просто n
.Параметры#
имя
port
interval
По умолчанию — 5s
.test
""
или "0"
,
проверка не пройдена.essential
persistent
essential
;
серверы с persistent
, работавшие до
перезагрузки конфигурации,
начинают получать запросы без необходимости сначала пройти эту проверку.fails
По умолчанию — 1.passes
По умолчанию — 1.max_response
По умолчанию — 256k
.mode
always
— серверы проверяются независимо от состояния;idle
— проверяются неработающие серверы, а также серверы,
где с последнего клиентского запроса прошло время interval
.onfail
— проверяются серверы только в неработающем состоянии.always
.udp
send
data:
или имя файла с данными
(задается абсолютно или относительно каталога /usr/local/angie/
).Встроенные переменные#
stream_upstream
поддерживает следующие встроенные переменные:$upstream_probe
: имя активной сейчас проверки upstream_probe
.$upstream_probe_response
:содержимое ответа,
полученного в ходе активной проверки upstream_probe
.Детали работы#
essential
(пропуская помеченные как persistent
, если конфигурация перезагружена
и до этого сервер считался работающим).
Если таких проверок нет, сервер считается работающим.fails
или сам сервер достигает порога max_fails
.passes
;
после этого учитывается порог max_fails
.