Модуль ngx_stream_upstream_hc_module
Пример конфигурации Директивы health_check health_check_timeout match |
Модуль ngx_stream_upstream_hc_module
(1.9.0)
позволяет активировать периодические проверки работоспособности серверов в
группе.
Группа должна находиться в
зоне разделяемой памяти.
Если проверка работоспособности была неуспешной, то сервер признаётся неработоспособным. Если для группы задано несколько проверок, то при любой неуспешной проверке соответствующий сервер будет считаться неработоспособным. На неработоспособные серверы и серверы в состоянии “checking” клиентские соединения передаваться не будут.
Модуль доступен как часть коммерческой подписки.
Пример конфигурации
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; }
Для каждого сервера группы tcp
с интервалом в 5 секунд проверяется возможность установки 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 [ |
---|---|
Умолчание: | — |
Контекст: |
server |
Активирует периодические проверки работоспособности серверов в группе.
Могут быть заданы следующие необязательные параметры:
-
interval
=время
- задаёт интервал между двумя последовательными проверками, по умолчанию 5 секунд.
-
jitter
=время
- задаёт время, в пределах которого случайным образом задерживается каждая проверка, по умолчанию задержки нет.
-
fails
=число
- задаёт число последовательных неуспешных проверок для определённого сервера, после которых сервер будет считаться неработоспособным, по умолчанию 1.
-
passes
=число
- задаёт число последовательных успешных проверок для определённого сервера, после которых сервер будет считаться работоспособным, по умолчанию 1.
-
mandatory
[persistent
] -
устанавливает исходное состояние “checking” для сервера до завершения первой проверки работоспособности (1.11.7). На серверы в состоянии “checking” клиентские соединения передаваться не будут. Если параметр не указан, то исходно сервер будет считаться работоспособным.
Параметр
persistent
(1.21.1) устанавливает исходное состояние “up” для сервера после перезагрузки nginx в случае, если до перезагрузки сервер считался работоспособным. -
match
=имя
-
указывает на блок
match
с условиями, которым должно удовлетворять соединение, чтобы результат проверки считался успешным. По умолчанию для TCP проверяется лишь возможность установки TCP-соединения с сервером, для UDP проверяется отсутствие сообщения ICMP “Destination Unreachable
” в ответ на отправленную строку “nginx health check
”.До версии 1.11.7 по умолчанию для UDP требовалось наличие блока match с параметрами send и expect.
-
port
=число
- задаёт порт, используемый при подключении к серверу для проверки его работоспособности (1.9.7). По умолчанию совпадает с портом сервера.
-
udp
-
указывает, что для проверки работоспособности будет использоваться протокол
UDP
вместо протоколаTCP
, используемого по умолчанию (1.9.13).
Синтаксис: |
health_check_timeout |
---|---|
Умолчание: |
health_check_timeout 5s; |
Контекст: |
stream , server |
Переопределяет значение proxy_timeout для проверок работоспособности.
Синтаксис: |
match |
---|---|
Умолчание: | — |
Контекст: |
stream |
Задаёт именованный набор тестов для для анализа ответов сервера на запросы проверки работоспособности.
Могут быть заданы следующие параметры:
-
send
строка
; -
отправляет
строку
на сервер; -
expect
стока
|~
regex
; -
текстовая строка (1.9.12) или регулярное выражение,
которым должны соответствовать данные, полученные с сервера.
Регулярное выражение задаётся либо с модификатором
“
~*
” (для поиска совпадения без учёта регистра символов), либо с модификатором “~
” (с учётом регистра).
Параметры send
и expect
могут содержать строки в шестнадцатеричном виде
с префиксом “\x
”
и последующими двумя шестнадцатеричными цифрами,
например “\x80
” (1.9.12).
Проверка работоспособности считается успешной, если
- TCP-соединение успешно установлено;
-
строка
из параметраsend
была отправлена (если была задана); -
данные, полученные от сервера, совпали со строкой или регулярным выражением
из параметра
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, полученные от сервера.