basculement nginx sans équilibrage de charge

13

J'ai du mal à configurer nginx.

J'utilise nignx comme proxy inverse. Je veux envoyer toutes mes demandes à mon premier serveur. Si le premier serveur est en panne, je veux envoyer des demandes au deuxième serveur.

En bref, comment puis-je avoir une solution de basculement sans équilibrage de charge?

Serhat
la source

Réponses:

13

Ce que vous voulez, c'est une configuration active + passive. Voici un exemple d'extrait de configuration nginx pour vous aider à démarrer:

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

Donc, «normalement», toutes les demandes iront à l'hôte 1.2.3.4. Si nous obtenons trois échecs dans cette boîte, alors 4.5.6.7 prendra le relais.

chrskly
la source
Et si vous avez plusieurs sauvegardes?
Benny Bottema
0

L'équilibrage de charge dans nginx est très facile, nous configurons simplement les noms de serveur dans la portée en amont, où nous écrivons la liste des serveurs pour l'équilibrage de charge.
nginx supporte différents algorithmes pour l'équilibrage de charge par défaut c'est round robine, mais nous le configurons avec différentes clés comme 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
la source
0

En étendant la réponse de chrskly, vous voudrez peut-être configurer 3 drapeaux / configurations.

  1. fail_timeout : temps total par tentatives infructueuses et marque également le serveur comme BAS pour la même heure. Si 5 secondes, alors tentera max_fail dans 5 secondes et s'il échoue toujours, marquez ce serveur comme BAS pendant 5 secondes.
  2. max_fail : nombre maximum d'essais
  3. proxy_connect_timeout : durée d'attente d'une connexion.

Dans l'exemple GRPC suivant, si le serveur principal ne peut pas être connecté en 7 secondes, passez à la sauvegarde et marquez le serveur principal comme arrêté pour 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
la source