Kako koristiti Nginx kao HTTP Load Balancer u Linuxu


Kada se radi o postavljanju višestrukih aplikacijskih poslužitelja za redundantnost, uravnoteženje opterećenja je često korišten mehanizam za učinkovitu distribuciju dolaznih zahtjeva za uslugama ili mrežnog prometa preko grupe pozadinskih poslužitelja.

Balansiranje opterećenja ima nekoliko prednosti, uključujući povećanu dostupnost aplikacije kroz redundanciju, povećanu pouzdanost i skalabilnost (više poslužitelja se može dodati u kombinaciju kada se promet poveća). Također donosi poboljšanu izvedbu aplikacije i mnoge druge prednosti.

Preporučeno za čitanje: Vrhunski vodič za osiguranje, jačanje i poboljšanje performansi Nginx web poslužitelja

Nginx može se implementirati kao učinkovit HTTP balanser opterećenja za distribuciju dolaznog mrežnog prometa i radnog opterećenja između grupe poslužitelja aplikacija, u svakom slučaju vraćajući odgovor s odabranog poslužitelja na odgovarajući klijent.

Metode uravnoteženja opterećenja koje podržava Nginx su:

  • round-robin – koji distribuira zahtjeve aplikacijskim poslužiteljima na kružni način. Koristi se prema zadanim postavkama kada nije navedena nijedna metoda,
  • najmanje povezan – sljedeći zahtjev dodjeljuje manje prometnom poslužitelju (poslužitelju s najmanjim brojem aktivnih veza),
  • ip-hash – gdje se hash funkcija koristi za određivanje poslužitelja koji treba odabrati za sljedeći zahtjev na temelju klijentove IP adrese. Ova metoda omogućuje postojanost sesije (vezivanje klijenta na određeni aplikacijski poslužitelj).

Osim toga, možete koristiti težine poslužitelja za utjecaj na Nginx algoritme za uravnoteženje opterećenja na naprednijoj razini. Nginx također podržava provjere zdravlja za označavanje poslužitelja kao neuspjelog (za konfigurabilno vrijeme, zadano je 10 sekundi) ako njegov odgovor ne uspije s pogreškom, čime se izbjegava odabir toga poslužitelj za naknadne dolazne zahtjeve neko vrijeme.

Ovaj praktični vodič pokazuje kako koristiti Nginx kao HTTP balanser opterećenja za distribuciju dolaznih zahtjeva klijenata između dva poslužitelja od kojih svaki ima instancu iste aplikacije.

Za potrebe testiranja, svaka instanca aplikacije je označena (na korisničkom sučelju) kako bi se označio poslužitelj na kojem se izvodi.

Postavljanje okoline za testiranje

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Na svakom poslužitelju aplikacija, svaka instanca aplikacije je konfigurirana za pristup pomoću domene tecmintapp.lan. Pod pretpostavkom da je ovo potpuno registrirana domena, dodali bismo sljedeće u DNS postavke.

A Record   		@   		192.168.58.7

Ovaj zapis govori zahtjevima klijenta kamo bi domena trebala usmjeravati, u ovom slučaju, uravnoteživač opterećenja (192.168.58.7). DNS A zapisi prihvaćaju samo IPv4 vrijednosti. Alternativno, datoteka /etc/hosts na klijentskim strojevima također se može koristiti za potrebe testiranja, sa sljedećim unosom.

192.168.58.7  	tecmintapp.lan

Postavljanje Nginx Load Balancing u Linuxu

Prije postavljanja uravnoteženja opterećenja Nginxa, morate instalirati Nginx na svoj poslužitelj koristeći zadani upravitelj paketa za svoju distribuciju kao što je prikazano.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Zatim izradite blok datoteku poslužitelja pod nazivom /etc/nginx/conf.d/loadbalancer.conf (dajte naziv po vlastitom izboru).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

Zatim kopirajte i zalijepite sljedeću konfiguraciju u njega. Ova konfiguracija je prema zadanim postavkama kružni postupak jer nije definirana metoda uravnoteženja opterećenja.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

U gornjoj konfiguraciji, direktiva proxy_pass (koja bi trebala biti navedena unutar lokacije, / u ovom slučaju) koristi se za prosljeđivanje zahtjeva HTTP proxy poslužiteljima navedenim pomoću backend riječi, u upstream direktivi (koristi se za definiranje grupe poslužitelja). Također, zahtjevi će se distribuirati između poslužitelja pomoću ponderiranog kružnog mehanizma balansiranja.

Za korištenje najmanjeg mehanizma povezivanja, koristite sljedeću konfiguraciju

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

A da biste omogućili mehanizam postojanosti sesije ip_hash, koristite:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Također možete utjecati na odluku o uravnoteženju opterećenja pomoću težina poslužitelja. Koristeći sljedeću konfiguraciju, ako postoji šest zahtjeva od klijenata, aplikacijskom poslužitelju 192.168.58.5 bit će dodijeljena 4 zahtjeva, a 2 će ići 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Spremite datoteku i izađite iz nje. Zatim provjerite je li konfiguracijska struktura Nginxa ispravna nakon dodavanja nedavnih promjena, pokretanjem sljedeće naredbe.

sudo nginx -t

Ako je konfiguracija u redu, ponovno pokrenite i omogućite uslugu Nginx za primjenu promjena.

sudo systemctl restart nginx
sudo systemctl enable nginx

Testiranje uravnoteženja opterećenja Nginx-a u Linuxu

Za testiranje Nginx uravnoteženja opterećenja, otvorite web preglednik i upotrijebite sljedeću adresu za navigaciju.

http://tecmintapp.lan

Nakon što se sučelje web stranice učita, zabilježite instancu aplikacije koja se učitala. Zatim neprestano osvježavajte stranicu. U nekom trenutku, aplikacija bi se trebala učitati s drugog poslužitelja što ukazuje na uravnoteženje opterećenja.

Upravo ste naučili kako postaviti Nginx kao HTTP balanser opterećenja u Linuxu. Željeli bismo znati vaše mišljenje o ovom vodiču, a posebno o korištenju Nginxa kao balansera opterećenja, putem donjeg obrasca za povratne informacije. Za više informacija pogledajte Nginx dokumentaciju o korištenju Nginxa kao HTTP balansera opterećenja.