GNU/Linux >> Linux Esercitazione >  >> Linux

Bilanciamento del carico Nginx

Il bilanciamento del carico tra più applicazioni, backend e server fa parte del processo di ottimizzazione delle risorse, miglioramento delle prestazioni e tolleranza agli errori del servizio.

Nginx come bilanciatore di carico

Questo server web è considerato una delle soluzioni più popolari e produttive perché ha la più ampia funzionalità e flessibilità durante la configurazione. Quindi Nginx viene spesso utilizzato per il bilanciamento del carico.

Esistono diversi approcci e implementazioni, ma prima verifica la disponibilità del modulo ngx_http_upstream_module:

# nginx -v

Se manca, dovrai ricostruire Nginx aggiungendo questo modulo. Successivamente, puoi iniziare a configurare il server web. Per abilitare il bilanciamento, aggiungi la direttiva upstream (sezione http) al file di configurazione di Nginx:

upstream backend  {
  server backend1.somesite.com;
  server backend2.somesite.com;
  server backend3.somesite.com;
}

Ora devi specificare il reindirizzamento del gruppo necessario:

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

Inoltre, Nginx supporta parametri aggiuntivi e metodi di bilanciamento del carico.

Scelta di un metodo di bilanciamento

Nginx offre diversi metodi di bilanciamento del carico.

Giro all'italiana

Per impostazione predefinita, il server web distribuisce le richieste in modo uniforme tra i backend (ma tenendo conto dei pesi). Questo è un metodo standard in Nginx, quindi non esiste una direttiva di inclusione.

meno_conn

Le richieste vengono prima inviate al backend con il minor numero di connessioni attive (ma tenendo conto dei pesi):

upstream backend {
    least_conn;

    server backend1.somesite.com;
    server backend2.somesite.com;
}

Hash e hash IP

Usando questo metodo, puoi creare una sorta di connessione persistente tra client e back-end. Per ogni richiesta, Nginx calcola un hash composto da testo, variabili del server Web o una loro combinazione, quindi lo mappa ai backend:

upstream backend {
   hash $scheme$request_uri;

   server backend1.somesite.com;
   server backend2.somesite.com;
   server backend3.somesite.com;
}

L'hash IP funziona solo con HTTP, questa è un'opzione predefinita in cui l'hash viene calcolato dall'indirizzo IP del client:

upstream backend {
   ip_hash;

   server backend1.somesite.com;
   server backend2.somesite.com;
   server backend3.somesite.com;
}

Peso backend

Se alcuni backend nello stack sono più potenti di altri, i pesi tornano utili:

upstream backend {
    server backend1.somesite.com weight=10;
    server backend2.somesite.com weight=5;
    server backend3.somesite.com;
    server 192.0.0.1 backup;
}

In questo esempio, su 16 richieste, il primo backend elaborerà 10, il secondo 5 e il terzo 1. In questo caso, il server di backup riceverà le richieste solo se i tre backend principali non sono disponibili.

Monitoraggio

Se Nginx ritiene che il server di backend non sia disponibile, interrompe temporaneamente l'invio di richieste. Due direttive sono responsabili di questo:

  • max_fails — imposta il numero di tentativi di connessione falliti, dopodiché il backend è considerato non disponibile per un certo tempo;
  • timeout_errore — tempo durante il quale il server è considerato non disponibile.

I parametri si presentano così:

upstream backend {                
    server backend1.somesite.com;
    server backend2.somesite.com max_fails=3 fail_timeout=30s;
    server backend3.somesite.com max_fails=2;
}

Conclusione

La scelta del metodo di bilanciamento appropriato consentirà di distribuire il carico in modo più uniforme. Non dimenticare i pesi del back-end, il monitoraggio e la tolleranza agli errori del server.


Linux
  1. Come reindirizzare da HTTP a HTTPS in Nginx

  2. nginx - 413 Entità richiesta troppo grande

  3. Come configurare il servizio di bilanciamento del carico HAProxy

  4. Installa Nginx su Windows

  5. Nginx inserisce nella whitelist alcuni IP

Come installare NGINX su Ubuntu 20.04

Come installare Nginx su CentOS 7

Come installare Nginx su Debian 8.2 Cloud Server

Come configurare NGINX su un server CentOS 7

Come configurare la cache Nginx sul server LEMP

Come configurare il bilanciamento del carico con NGINX su Jelastic Cloud