Spec-Zone.ru › nginx

Модуль ngx_stream_upstream_hc_module

  • Пример конфигурации
  • Директивы
  • health_check
  • health_check_timeout
  • match

Модуль 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

Определяет набор тестов с именем, используемый для проверки ответов серверов на проверки состояния.

Можно настроить следующие параметры:

send string;
отправляет string на сервер;
expect string | ~ 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API