Модуль 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
устанавливает исходное состояние “checking” для сервера до завершения первой проверки работоспособности (1.11.7). На серверы в состоянии “checking” клиентские соединения передаваться не будут. Если параметр не указан, то исходно сервер будет считаться работоспособным.
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).

Проверка работоспособности считается успешной, если

Пример:

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, полученные от сервера.