Upstream Probe#

O módulo implementa sondas de saúde ativas para Upstream.

Exemplo de Configuração#

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

Diretivas#

upstream_probe (PRO)#

Adicionado na versão 1.2.0: PRO

Sintaxe

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];

Padrão

Contexto

location

Define uma sonda de saúde ativa para servidores dentro dos grupos upstream que são especificados para proxy_pass, uwsgi_pass, e assim por diante no mesmo contexto location com a diretiva upstream_probe. Subsequentemente, o Angie executa regularmente requisições de acordo com os parâmetros especificados para cada servidor no grupo upstream.

Um servidor passa na sonda se a requisição para ele for bem-sucedida, considerando todas as configurações de parâmetros da diretiva upstream_probe e todos os parâmetros que controlam como os upstreams são usados pelo contexto location onde é definido. Isso inclui as diretivas proxy_next_upstream e uwsgi_next_upstream, etc.; também, proxy_set_header e assim por diante.

Para fazer uso das sondas, o upstream deve ter uma zona de memória compartilhada (zone). Um upstream pode ser configurado com várias sondas.

Os seguintes parâmetros são aceitos:

name

Nome obrigatório da sonda.

uri

URI da requisição a ser adicionado ao argumento para proxy_pass, uwsgi_pass, etc. Por padrão — /.

port

Número de porta alternativo para a requisição da sonda.

interval

Intervalo entre sondas. Por padrão — 5s.

method

Método HTTP da requisição da sonda. Por padrão — GET.

test

A condição a ser verificada durante a requisição; definida como uma string com variáveis. Se a substituição de variável resultar em "" ou "0", a sonda não é aprovada.

essential

Se definido, o estado inicial do servidor está sujeito à verificação e requisições de cliente não são encaminhadas para ele até que a sonda seja aprovada.

persistent

Definir este parâmetro requer habilitar essential primeiro; servidores persistent que estavam funcionando antes de um recarregamento de configuração começam a receber requisições sem serem obrigados a passar nesta sonda primeiro.

fails

Número de requisições consecutivas falhadas que tornam o servidor não saudável. Por padrão — 1.

passes

Número de requisições consecutivas bem-sucedidas que tornam o servidor saudável. Por padrão — 1.

max_body

Quantidade máxima de memória para o corpo da resposta. Por padrão — 256k.

mode

Modo da sonda, dependendo da saúde dos servidores:

  • always — servidores são sondados independentemente de seu estado;

  • idle — sondas afetam servidores não saudáveis e servidores onde interval passou desde a última requisição do cliente.

  • onfail — apenas servidores não saudáveis são sondados.

Por padrão — always.

Exemplo:

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

Detalhes da operação da sonda:

  • Inicialmente, o servidor não receberá requisições de cliente até que passe em todas as sondas essential configuradas para ele (pulando as persistent se a configuração foi recarregada e o servidor foi considerado saudável antes disso). Se não há tais sondas, o servidor é considerado saudável.

  • O servidor é considerado não saudável e não receberá requisições de cliente, se qualquer das sondas configuradas para ele atingir seu limite fails ou o próprio servidor atingir o limite max_fails.

  • Para um servidor não saudável ser considerado saudável novamente, todas as sondas configuradas para ele devem atingir seus respectivos limites passes; depois disso, o limite max_fails é considerado.

Variáveis Integradas#

O módulo http_upstream_probe suporta as seguintes variáveis integradas:

$upstream_probe (PRO)#

Nome da upstream_probe atualmente ativa.

$upstream_probe_body (PRO)#

Corpo da resposta do servidor, recebido durante uma upstream_probe; seu tamanho é limitado por max_body.