Sondeo de upstream#

El módulo implementa sondeos activos de salud para stream_upstream.

Configuración de ejemplo#

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\r\n\r\n";
}

Nota

Según RFC 2616 (HTTP/1.1) y RFC 9110 (Semántica HTTP), las cabeceras HTTP deben estar separadas por una secuencia CRLF (rn) en lugar de solo n.

Directivas#

upstream_probe (PRO)#

Added in version 1.4.0: PRO

Sintaxis

upstream_probe name [port=number] [interval=time] [test=condition] [essential [persistent]] [fails=number] [passes=number] [max_response=size] [mode=always | idle | onfail] [udp] [send=string];

Predeterminado

Contexto

server

Define un sondeo activo de salud para servidores dentro del grupo upstream especificado en la directiva proxy_pass en el mismo contexto server donde se encuentra la directiva upstream_probe.

Un servidor pasa el sondeo si la solicitud tiene éxito, considerando todos los parámetros de configuración de la directiva upstream_probe y todos los parámetros que afectan cómo se utilizan los upstreams por el contexto server donde está definido, incluyendo la directiva proxy_next_upstream.

Para hacer uso de los sondeos, el upstream debe tener una zona de memoria compartida (zone). Un upstream puede configurarse con varios sondeos.

Se aceptan los siguientes parámetros:

name

Nombre obligatorio del sondeo.

port

Número de puerto alternativo para la solicitud de sondeo.

interval

Intervalo entre sondeos. Por defecto — 5s.

test

La condición para el sondeo, definida como una cadena de variables. Si la sustitución de variables produce "" o "0", el sondeo no pasa.

essential

Si se establece, se comprueba el estado inicial del servidor, por lo que el servidor no recibe solicitudes de clientes hasta que se supere el sondeo.

persistent

Configurar este parámetro requiere habilitar primero essential; los servidores persistent que se consideraron saludables antes de una recarga de configuración comienzan a recibir solicitudes sin necesidad de pasar este sondeo primero.

fails

Número de sondeos fallidos consecutivos que hacen que el servidor se considere no saludable. Por defecto — 1.

passes

Número de sondeos exitosos consecutivos que hacen que el servidor se considere saludable. Por defecto — 1.

max_response

Tamaño máximo de memoria para la respuesta. Si se especifica un valor cero, se deshabilita la espera de la respuesta. Por defecto — 256k.

mode

Modo de sondeo, dependiendo del estado de los servidores:

  • always — los servidores son sondeados independientemente de su estado;

  • idle — los sondeos afectan a servidores no saludables y servidores donde ha transcurrido interval desde la última solicitud del cliente.

  • onfail — solo se sondean los servidores no saludables.

Por defecto — always.

udp

Si se especifica, se utiliza el protocolo UDP para el sondeo. Por defecto, TCP se utiliza para el sondeo.

send

Datos enviados para la comprobación; puede ser una cadena con el prefijo data: o un nombre de archivo con datos (especificado de forma absoluta o relativa al directorio /usr/local/angie/).

Ejemplo:

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";
}

Detalles de operación del sondeo:

  • Inicialmente, el servidor no recibirá solicitudes de clientes hasta que supere todos los sondeos essential configurados para él, omitiendo los persistent si la configuración se recargó y el servidor se consideraba saludable antes de eso. Si no hay tales sondeos, el servidor se considera saludable.

  • El servidor se considera no saludable y no recibirá solicitudes de clientes, si cualquiera de los sondeos configurados para él alcanza fails o el servidor alcanza max_fails.

  • Para que un servidor no saludable se considere saludable nuevamente, todos los sondeos configurados para él deben alcanzar sus respectivos passes; después de eso, también se considera max_fails.

Variables integradas#

El módulo stream_upstream admite las siguientes variables integradas:

$upstream_probe (PRO)#

Nombre del upstream_probe actualmente activo.

$upstream_probe_response (PRO)#

Contenido de la respuesta recibida durante un sondeo activo configurado por upstream_probe.