El balanceig de càrrega és una tècnica essencial per distribuir el tràfic de xarxa a través de múltiples servidors per garantir la disponibilitat, la fiabilitat i la capacitat de resposta de les aplicacions web. NGINX és àmpliament utilitzat com a balancejador de càrrega gràcies a la seva eficiència i flexibilitat.

Conceptes clau

  • Balancejador de càrrega: Un dispositiu o programari que distribueix el tràfic de xarxa entre diversos servidors.
  • Backend: Els servidors que reben el tràfic distribuït pel balancejador de càrrega.
  • Algorismes de balanceig: Mètodes utilitzats per determinar com es distribueix el tràfic entre els servidors.

Algorismes de balanceig de càrrega

NGINX suporta diversos algorismes de balanceig de càrrega. A continuació es presenten els més comuns:

  1. Round Robin: Distribueix les sol·licituds de manera seqüencial entre els servidors.
  2. Least Connections: Envia les sol·licituds al servidor amb menys connexions actives.
  3. IP Hash: Assigna les sol·licituds basant-se en l'adreça IP del client, garantint que les sol·licituds del mateix client vagin sempre al mateix servidor.

Configurant el balanceig de càrrega

Exemple de configuració bàsica

A continuació es mostra un exemple de configuració de NGINX com a balancejador de càrrega utilitzant l'algorisme Round Robin:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Explicació del codi

  • upstream backend: Defineix un grup de servidors backend. En aquest cas, backend1.example.com, backend2.example.com i backend3.example.com.
  • server: Defineix un servidor virtual que escolta a la porta 80.
  • location /: Defineix una ubicació que redirigeix totes les sol·licituds al grup de servidors backend utilitzant proxy_pass.
  • proxy_set_header: Afegeix capçaleres HTTP per mantenir informació sobre el client original.

Exemple amb Least Connections

Per utilitzar l'algorisme Least Connections, simplement afegeix la directiva least_conn al bloc upstream:

http {
    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Exemple amb IP Hash

Per utilitzar l'algorisme IP Hash, afegeix la directiva ip_hash al bloc upstream:

http {
    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Exercicis pràctics

Exercici 1: Configuració bàsica de balanceig de càrrega

  1. Configura NGINX per utilitzar l'algorisme Round Robin amb tres servidors backend.
  2. Verifica que les sol·licituds es distribueixen de manera equitativa entre els servidors.

Solució

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Exercici 2: Utilitzant Least Connections

  1. Modifica la configuració anterior per utilitzar l'algorisme Least Connections.
  2. Verifica que les sol·licituds es distribueixen al servidor amb menys connexions actives.

Solució

http {
    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Errors comuns i consells

  • Error 502 Bad Gateway: Aquest error sovint indica que NGINX no pot comunicar-se amb els servidors backend. Verifica que els servidors backend estan en funcionament i que les adreces i ports són correctes.
  • Configuració incorrecta de capçaleres: Assegura't d'afegir les capçaleres necessàries (proxy_set_header) per mantenir la informació del client original.

Conclusió

El balanceig de càrrega amb NGINX és una tècnica poderosa per millorar la disponibilitat i la capacitat de resposta de les aplicacions web. Amb diversos algorismes de balanceig disponibles, NGINX ofereix flexibilitat per adaptar-se a diferents necessitats i escenaris. Practicar amb diferents configuracions i comprendre els errors comuns t'ajudarà a dominar aquesta funcionalitat essencial.

© Copyright 2024. Tots els drets reservats