Upstream Probe#

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

Configuración de ejemplo#

server {
    listen ...;

    location /backend {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}

Directivas#

upstream_probe (PRO)#

Added in version 1.2.0: PRO

Sintaxis

upstream_probe name [uri=address] [port=number] [interval=time] [method=method] [test=condition] [essential [persistent]] [fails=number] [passes=number] [max_body=size] [mode=always | idle | onfail];

Predeterminado

Contexto

location

Define un sondeo activo de salud para servidores dentro de los grupos upstream que se especifican para proxy_pass, uwsgi_pass, etc. en el mismo contexto location con la directiva upstream_probe. Posteriormente, Angie realiza regularmente solicitudes según los parámetros especificados a cada servidor en el grupo upstream.

Un servidor pasa el sondeo si la solicitud tiene éxito, considerando todas las configuraciones de parámetros de la directiva upstream_probe y todos los parámetros que controlan cómo se utilizan los upstreams por el contexto location donde está definido. Esto incluye las directivas proxy_next_upstream y uwsgi_next_upstream, etc.; también, proxy_set_header y similares.

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.

uri

URI de solicitud que se añadirá al argumento para proxy_pass, uwsgi_pass, etc. Por defecto — /.

port

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

interval

Intervalo entre sondeos. Por defecto — 5s.

method

Método HTTP de la solicitud de sondeo. Por defecto — GET.

test

La condición que se verificará durante la solicitud; definida como una cadena con variables. Si la sustitución de variables produce "" o "0", el sondeo no se pasa.

essential

Si se establece, el estado inicial del servidor está sujeto a verificación y las solicitudes del cliente no se reenvían a él hasta que el sondeo sea superado.

persistent

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

fails

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

passes

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

max_body

Cantidad máxima de memoria para el cuerpo de la respuesta. Por defecto — 256k.

mode

Modo de sondeo, dependiendo de la salud de los servidores:

  • always — los servidores se sondean independientemente de su estado;

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

  • onfail — solo los servidores no saludables son sondeados.

Por defecto — always.

Ejemplo:

upstream backend {
    zone backend 1m;

    server backend1.example.com;
    server backend2.example.com;
}

map $upstream_status $good {
    200     "1";
}

server {
    listen ...;

    location /backend {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            persistent
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}

Detalles de la operación de 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 su umbral fails o el propio servidor alcanza el umbral max_fails.

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

Variables Integradas#

El módulo http_upstream_probe admite las siguientes variables integradas:

$upstream_probe (PRO)#

Nombre del upstream_probe actualmente activo.

$upstream_probe_body (PRO)#

Cuerpo de la respuesta del servidor, recibido durante una upstream_probe; su tamaño está limitado por max_body.