Failover nginx sem balanceamento de carga

13

Estou tendo problemas para configurar o nginx.

Estou usando o nignx como um proxy reverso. Quero enviar todos os meus pedidos para o meu primeiro servidor. Se o primeiro servidor estiver inativo, desejo enviar solicitações para o segundo servidor.

Em resumo, como posso ter uma solução de failover sem balanceamento de carga?

Serhat
fonte

Respostas:

13

O que você deseja é uma configuração ativa + passiva. Aqui está um exemplo de snippet de conf do nginx para você começar:

upstream backend {
    server 1.2.3.4:80 fail_timeout=5s max_fails=3;
    server 4.5.6.7:80 backup;
}

server {
    listen 80;
    server_name whatevs.com;

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

Portanto, 'normalmente', todas as solicitações irão para o host 1.2.3.4. Se conseguirmos três falhas nessa caixa, o 4.5.6.7 assumirá o controle.

chrskly
fonte
E se você tiver vários backups?
Benny Bottema
0

O balanceamento de carga no nginx é muito fácil, apenas configuramos os nomes dos servidores no escopo upstream, onde escrevemos a lista de servidores para o balanceamento de carga.
O nginx suporta algoritmos diferentes para balanceamento de carga por padrão, é round robine, mas nós o configuramos com chaves diferentes como ip_hash ...

http{
 upstream servername{
    ip_hash//for sticky hash
    least_conn//FOR least connection 
    sever localhost:1001;
    sever localhost:1002;
    sever localhost:1003;
}
akshay panwar
fonte
0

Estendendo a resposta do chrskly, você pode querer configurar 3 sinalizadores / configurações.

  1. fail_timeout : tempo total por tentativas com falha e também marca o servidor como DOWN pelo mesmo tempo. Se 5 segundos, tentará tentativas de max_fail em 5 segundos e se ainda falhar, marque o servidor como BAIXO por 5 segundos.
  2. max_fail : número máximo de tentativas
  3. proxy_connect_timeout : a quantidade de tempo para aguardar uma conexão.

No exemplo a seguir do GRPC, se o servidor principal não puder ser conectado em 7 segundos, alterne para o backup e marque o servidor principal como inativo por 6000s:

upstream grpcservers {
    server 192.168.0.XX:9997 fail_timeout=6000s max_fails=1;  # After 1 fail in 6000s, Main server is marked unavailable for 6000s.
    server 192.168.0.XX:9999 backup;
        } 
location / {
            grpc_pass grpc://grpcservers;
            grpc_connect_timeout 7s;  # If conn cant be made in 7sec, switch to backup
        }

Prakhar Pandey
fonte