Przełączanie awaryjne nginx bez równoważenia obciążenia

13

Mam problem z konfiguracją Nginx.

Używam nignx jako odwrotnego proxy. Chcę wysłać wszystkie moje żądania na mój pierwszy serwer. Jeśli pierwszy serwer jest wyłączony, chcę wysyłać żądania do drugiego serwera.

Krótko mówiąc, w jaki sposób mogę uzyskać rozwiązanie przełączania awaryjnego bez równoważenia obciążenia?

Serhat
źródło

Odpowiedzi:

13

To, czego chcesz, to konfiguracja aktywna + pasywna. Oto przykładowy fragment nginx conf na początek:

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

Tak więc „normalnie” wszystkie żądania trafią do hosta 1.2.3.4. Jeśli otrzymamy trzy awarie w tym polu, wówczas przejmie 4.5.6.7.

chrskly
źródło
Co się stanie, jeśli masz wiele kopii zapasowych?
Benny Bottema,
0

Równoważenie obciążenia w nginx jest bardzo proste. Po prostu konfigurujemy nazwy serwerów w górnym zakresie, gdzie piszemy listę serwerów do równoważenia obciążenia.
nginx domyślnie obsługuje inny algorytm równoważenia obciążenia. Jest to okrągły robine, ale konfigurujemy go za pomocą różnych kluczy, takich jak 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
źródło
0

Rozszerzając odpowiedź chrskly, możesz chcieć skonfigurować 3 flagi / config.

  1. fail_timeout : Całkowity czas nieudanych prób, a także oznacz serwer jako DOWN na ten sam czas. Jeśli 5 sekund, to spróbuje max_fail prób za 5 sekund, a jeśli nadal się nie powiedzie, oznacz ten serwer jako DOWN na 5 sekund.
  2. max_fail : Maksymalna liczba prób
  3. proxy_connect_timeout : czas oczekiwania na połączenie.

W poniższym przykładzie GRPC, jeśli główny serwer nie może zostać podłączony w ciągu 7 sekund, przełącz się na kopię zapasową i oznacz główny serwer jako wyłączony na 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
źródło