Модуль ngx_stream_upstream_hc_module
Модуль ngx_stream_upstream_hc_module (1.9.0) позволяет включить периодические проверки состояния серверов в группе. Группа серверов должна храниться в совместно используемой памяти.
Если проверка состояния сервера завершается неудачно, сервер считается неработоспособным. Если для одной группы серверов определено несколько проверок состояния, то неудача в любой из них помечает соответствующий сервер как неработоспособный. Клиентские подключения не передаются неработоспособным серверам и серверам в состоянии «проверка».
Этот модуль доступен в рамках нашей коммерческой подписки.
Пример конфигурации
upstream tcp {
zone upstream_tcp 64k;
server backend1.example.com:12345 weight=5;
server backend2.example.com:12345 fail_timeout=5s slow_start=30s;
server 192.0.2.1:12345 max_fails=3;
server backup1.example.com:12345 backup;
server backup2.example.com:12345 backup;
}
server {
listen 12346;
proxy_pass tcp;
health_check;
}
С этой конфигурацией nginx будет проверять возможность установления TCP-соединения с каждым сервером в группе tcp каждые пять секунд. Если соединение с сервером установить не удаётся, проверка состояния завершится неудачно, и сервер будет считаться неработоспособным.
Проверки состояния могут быть настроены для протокола UDP:
upstream dns_upstream {
zone dns_zone 64k;
server dns1.example.com:53;
server dns2.example.com:53;
server dns3.example.com:53;
}
server {
listen 53 udp;
proxy_pass dns_upstream;
health_check udp;
}
В этом случае ожидается отсутствие ICMP-сообщения «Destination Unreachable» в ответ на отправленную строку «nginx health check».
Проверки состояния также могут быть настроены для проверки данных, полученных от сервера. Тесты настраиваются отдельно с помощью директивы match и упоминаются в параметре match директивы health_check.
Директивы
| Синтаксис: | health_check [parameters]; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | server |
Включает периодические проверки состояния серверов в группе.
Поддерживаются следующие необязательные параметры:
-
interval=time - устанавливает интервал между двумя последовательными проверками состояния, по умолчанию 5 секунд.
-
jitter=time - устанавливает время, в течение которого каждая проверка состояния будет случайным образом отложена, по умолчанию задержка отсутствует.
-
fails=number - устанавливает количество последовательных неудачных проверок состояния конкретного сервера, после чего этот сервер будет считаться неработоспособным, по умолчанию 1.
-
passes=number - устанавливает количество последовательных успешных проверок состояния конкретного сервера, после чего сервер будет считаться работоспособным, по умолчанию 1.
-
mandatory[persistent] -
устанавливает начальное состояние «проверка» для сервера до завершения первой проверки состояния (1.11.7). Клиентские подключения не передаются серверам в состоянии «проверка». Если параметр не указан, сервер изначально считается работоспособным.
Параметр
persistent(1.21.1) устанавливает начальное состояние «включен» для сервера после перезагрузки, если сервер был работоспособным до перезагрузки. -
match=name - указывает блок
match, настраивающий тесты, которые должно пройти успешное соединение для успешной проверки состояния. По умолчанию для TCP проверяется только возможность установления TCP-соединения с сервером. Для UDP ожидается отсутствие ICMP-сообщения «Destination Unreachable» в ответ на отправленную строку «nginx health check».До версии 1.11.7 по умолчанию проверка состояния UDP требовала блок match с параметрами send и expect.
-
port=number - определяет порт, используемый при подключении к серверу для выполнения проверки состояния (1.9.7). По умолчанию равен порту сервера.
-
udp - указывает, что для проверок состояния должен использоваться протокол
UDPвместо стандартного протоколаTCP(1.9.13).
| Синтаксис: | health_check_timeout timeout; |
|---|---|
| Значение по умолчанию: | health_check_timeout 5s; |
| Контекст: | stream, server |
Переопределяет значение proxy_timeout для проверок состояния.
| Синтаксис: | match name { ... } |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | stream |
Определяет набор тестов с именем, используемый для проверки ответов серверов на проверки состояния.
Можно настроить следующие параметры:
-
sendstring; - отправляет
stringна сервер; -
expectstring|~regex; - строку (1.9.12) или регулярное выражение, которому должны соответствовать полученные от сервера данные. Регулярное выражение задаётся с предшествующим модификатором «
~*» (для нечувствительного к регистру сопоставления) или модификатором «~» (для чувствительного к регистру сопоставления).
Оба параметра send и expect могут содержать шестнадцатеричные литералы с префиксом «\x», за которым следуют две шестнадцатеричные цифры, например, «\x80» (1.9.12).
Проверка состояния пройдена, если:
- TCP-соединение было успешно установлено;
- данные из параметра
string, если указан, были отправлены; - полученные от сервера данные соответствуют строке или регулярному выражению из параметра
expect, если указан; - затраченное время не превышает значение, указанное в директиве health_check_timeout.
Пример:
upstream backend {
zone upstream_backend 10m;
server 127.0.0.1:12345;
}
match http {
send "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n";
expect ~ "200 OK";
}
server {
listen 12346;
proxy_pass backend;
health_check match=http;
}
Рассматриваются только первые proxy_buffer_size байт данных, полученных от сервера.
© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/stream/ngx_stream_upstream_hc_module.html