Nginx-Failover ohne Lastenausgleich

13

Ich habe Probleme beim Konfigurieren von Nginx.

Ich benutze Nignx als Reverse-Proxy. Ich möchte alle Anfragen an meinen ersten Server senden. Wenn der erste Server ausfällt, möchte ich Anfragen an den zweiten Server senden.

Kurz gesagt, wie kann ich eine Failover-Lösung ohne Lastausgleich erhalten?

Serhat
quelle

Antworten:

13

Was Sie wollen, ist eine aktive + passive Einrichtung. Hier ist ein Beispiel für ein Nginx-Conf-Snippet:

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

Normalerweise gehen alle Anfragen an Host 1.2.3.4. Wenn wir drei Fehler in dieser Box haben, wird 4.5.6.7 übernehmen.

chrskly
quelle
Was ist, wenn Sie mehrere Backups haben?
Benny Bottema
0

Der Lastausgleich in nginx ist sehr einfach. Wir konfigurieren lediglich die Servernamen im Upstream-Bereich. Dort schreiben wir eine Serverliste für den Lastausgleich.
Nginx unterstützt verschiedene Algorithmen für den Lastausgleich. Standardmäßig handelt es sich um Round-Robin-Algorithmen. Wir konfigurieren sie jedoch mit verschiedenen Schlüsseln wie 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
quelle
0

Wenn Sie die Antwort von chrskly erweitern, möchten Sie möglicherweise 3 Flags / configs konfigurieren.

  1. fail_timeout : Gesamtzeit nach fehlgeschlagenen Versuchen. Markieren Sie den Server für dieselbe Zeit als DOWN. Wenn 5 Sekunden, wird versucht, max_fail Versuche in 5 Sekunden und wenn immer noch fehlschlägt, markieren Sie diesen Server für 5 Sekunden als DOWN.
  2. max_fail : Maximale Anzahl von Versuchen
  3. proxy_connect_timeout : Die Wartezeit auf eine Verbindung.

Wenn im folgenden GRPC-Beispiel innerhalb von 7 Sekunden keine Verbindung zum Hauptserver hergestellt werden kann, wechseln Sie zur Sicherung, und markieren Sie den Hauptserver für 6000s als inaktiv:

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
quelle