Failover nginx senza bilanciamento del carico


13

Ho problemi a configurare nginx.

Sto usando nignx come proxy inverso. Voglio inviare tutte le mie richieste al mio primo server. Se il primo server è inattivo, voglio inviare richieste al secondo server.

In breve, come posso avere una soluzione di failover senza bilanciamento del carico?

Risposte:


13

Quello che vuoi è una configurazione attiva + passiva. Ecco un esempio di frammento di configurazione nginx per iniziare:

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

Pertanto, "normalmente", tutte le richieste andranno all'host 1.2.3.4. Se otteniamo tre errori in quella casella, allora 4.5.6.7 subentrerà.


Cosa succede se si dispone di più backup?
Benny Bottema,

0

Il bilanciamento del carico in nginx è molto semplice, stiamo semplicemente configurando i nomi dei server nell'ambito upstream, dove scriviamo l'elenco dei server per il bilanciamento del carico.
nginx supporta diversi algoritmi per il bilanciamento del carico di default è round robine, ma lo configuriamo con chiavi diverse come ip_hash ...

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

0

Estendendo la risposta di chrskly, potresti voler configurare 3 flag / configurazioni.

  1. fail_timeout : tempo totale per tentativi falliti e anche contrassegnare il server come DOWN per lo stesso tempo. Se 5 sec, allora proverà i tentativi max_fail in 5 sec e se ancora fallisce, segna quel server come DOWN per 5 sec.
  2. max_fail : numero massimo di tentativi
  3. proxy_connect_timeout : il tempo di attesa per una connessione.

Nel seguente esempio GRPC, se il server principale non può essere collegato in 7 secondi, passa al backup e contrassegna il server principale come inattivo per 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
        }

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.