Проверки работоспособности серверов#
Angie ADC включает пассивные и активные проверки работоспособности серверов (health probes). Если сервер начинает отвечать с ошибками, Angie ADC временно исключает его из пула доступных серверов. Пассивные проверки работают автоматически на основе реальных клиентских запросов. Пример: В этой конфигурации сервер помечается как недоступный после двух неудачных запросов подряд ( Активные проверки позволяют оценить доступность сервера без участия клиентов.
Поддерживаются активные проверки для HTTP и TCP / UDP.
Проверки задаются с помощью директивы Детали работы: Изначально сервер не получает клиентские запросы,
пока не пройдет все заданные для него проверки с параметром Сервер считается неработающим и не получает клиентские запросы,
если какая-либо заданная для него проверка достигает своего порога Чтобы неработающий сервер снова мог считаться работающим,
все заданные для него проверки должны достичь своего порога Примечание Согласно спецификации RFC 2616 (HTTP/1.1) и RFC 9110 (HTTP Semantics),
заголовки HTTP должны разделяться последовательностью CRLF ( Детали работы: Изначально сервер не получает клиентские запросы,
пока не пройдет все заданные для него проверки с параметром Сервер считается неработающим и не получает клиентские запросы,
если какая-либо заданная для него проверка достигает своего порога Чтобы неработающий сервер снова мог считаться работающим,
все заданные для него проверки должны достичь своего порога Детали работы: Используется проверка методом ICMP Echo вместо HTTP-запроса. ICMP-проверка проверяет доступность IP-адреса Сервер считается неработающим и не получает клиентские запросы, если не отвечает
на запрос ICMP Echo в течение заданного таймаута.
Первая проверка использует таймаут ожидания по умолчанию (1 секунда).
Вторая проверка задает таймаут ожидания ответа явно (3 секунды). Единственным критерием прохождения проверки является успешное получение ICMP-ответа в пределах таймаута.Пассивные проверки#
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
).
Если он восстановился, запросы снова начинают отправляться на этот сервер.Активные проверки#
upstream_probe
.
Для одного апстрима можно определить несколько проверок.
Можно гибко настраивать поведение проверок. Поддерживается отправка ICMP echo-запросов (ping).
Подробнее см. справочные материалы по активным проверкам HTTP
и stream.Пример для HTTP#
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.Пример для TCP/UDP#
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\r\n\r\n";
}
rn
), а
не просто n
.essential
(пропуская помеченные как persistent
, если конфигурация перезагружена
и до этого сервер считался работающим).
Если таких проверок нет, сервер считается работающим.fails
или сам сервер достигает порога max_fails.passes
;
после этого учитывается порог max_fails.Пример ICMP echo-запроса для HTTP#
http {
upstream u {
zone z 1k;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen ...;
location / {
proxy_pass http://u/;
upstream_probe simple1
interval=3s
ping;
upstream_probe simple2
interval=3s
ping ping_timeout=3s;
}
}
}
127.0.0.1
.
Порты upstream
игнорируются.