Kako koristiti Nginx kao HTTP balanser opterećenja u Linuxu


Kada je u pitanju postavljanje višestrukih servera aplikacija za redundantnost, balansiranje opterećenja je uobičajeni mehanizam za efikasnu distribuciju dolaznih zahtjeva za uslugom ili mrežnog prometa preko grupe back-end servera.

Balansiranje opterećenja ima nekoliko prednosti, uključujući povećanu dostupnost aplikacija kroz redundantnost, povećanu pouzdanost i skalabilnost (više servera se može dodati u miks kada se promet poveća). To također donosi poboljšane performanse aplikacije i mnoge druge prednosti.

Preporučeno čitanje: Ultimativni vodič za sigurnu, ojačanu i poboljšanje performansi Nginx web servera

Nginx se može primijeniti kao efikasan HTTP balansiranje 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 sa odabranog servera na odgovarajućeg klijenta.

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

  • round-robin – koji distribuira zahtjeve serverima aplikacija na kružni način. Koristi se po defaultu kada nije navedena metoda,
  • najmanje povezan – dodjeljuje sljedeći zahtjev manje zauzetom serveru (serveru s najmanjim brojem aktivnih veza),
  • ip-hash – gdje se koristi hash funkcija da se odredi koji server treba biti odabran za sljedeći zahtjev na osnovu IP adrese klijenta. Ova metoda omogućava postojanost sesije (vezivanje klijenta za određeni server aplikacija).

Osim toga, možete koristiti težine servera da utičete na Nginx algoritme za balansiranje opterećenja na naprednijem nivou. Nginx također podržava zdravstvene provjere za označavanje servera kao neuspjelog (za konfigurabilno vrijeme, zadana vrijednost je 10 sekundi) ako njegov odgovor ne uspije s greškom, čime se izbjegava odabir tog server za naknadne dolazne zahtjeve neko vrijeme.

Ovaj praktični vodič pokazuje kako koristiti Nginx kao HTTP balansator opterećenja za distribuciju dolaznih zahtjeva klijenta između dva servera od kojih svaki ima instancu iste aplikacije.

U svrhu testiranja, svaka instanca aplikacije je označena (na korisničkom interfejsu) kako bi se ukazalo na server na kojem radi.

Postavljanje okruženja za testiranje

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

Na svakom aplikacijskom poslužitelju, svaka instanca aplikacije je konfigurirana da joj se pristupa korištenjem domene tecmintapp.lan. Pod pretpostavkom da je ovo potpuno registrovana domena, dodali bismo sljedeće u DNS postavkama.

A Record   		@   		192.168.58.7

Ovaj zapis govori zahtjevima klijenata gdje domen treba da se usmjeri na, u ovom slučaju, balansator opterećenja (192.168.58.7). DNS A zapisi prihvataju samo IPv4 vrijednosti. Alternativno, datoteka /etc/hosts na klijentskim mašinama se također može koristiti u svrhe testiranja, sa sljedećim unosom.

192.168.58.7  	tecmintapp.lan

Postavljanje Nginx balansiranja opterećenja u Linuxu

Prije postavljanja Nginx balansiranja opterećenja, morate instalirati Nginx na vaš server koristeći zadani upravitelj paketa za vašu distribuciju kao što je prikazano.

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

Zatim kreirajte serverski blok fajl pod nazivom /etc/nginx/conf.d/loadbalancer.conf (dajte ime po svom izboru).

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

Zatim kopirajte i zalijepite sljedeću konfiguraciju u njega. Ova konfiguracija podrazumevano je round-robin jer nije definirana metoda balansiranja 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, proxy_pass direktiva (koja bi trebala biti specificirana unutar lokacije, / u ovom slučaju) se koristi za prosljeđivanje zahtjeva HTTP proksi serverima na koje se upućuje pomoću backend riječi, u upstream direktivi (koristi se za definiranje grupe servera). Također, zahtjevi će se distribuirati između servera korištenjem ponderiranog round-robin mehanizma za uravnoteženje.

Da biste koristili najmanji mehanizam povezivanja, koristite sljedeću konfiguraciju

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

I da omogućite 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 balansiranju opterećenja koristeći težine servera. Koristeći sljedeću konfiguraciju, ako postoji šest zahtjeva od klijenata, aplikacijskom serveru 192.168.58.5 će biti 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;
    }

Sačuvajte datoteku i izađite iz nje. Zatim se uvjerite da je struktura konfiguracije Nginxa ispravna nakon dodavanja nedavnih promjena, tako što ćete pokrenuti sljedeću naredbu.

sudo nginx -t

Ako je konfiguracija u redu, ponovo pokrenite i omogućite Nginx servis da primijeni promjene.

sudo systemctl restart nginx
sudo systemctl enable nginx

Testiranje Nginx balansiranja opterećenja u Linuxu

Da biste testirali Nginx balansiranje opterećenja, otvorite web pretraživač i koristite sljedeću adresu za navigaciju.

http://tecmintapp.lan

Kada se sučelje web stranice učita, zabilježite instancu aplikacije koja se učitala. Zatim kontinuirano osvježavajte stranicu. U nekom trenutku, aplikacija bi se trebala učitati sa drugog servera što ukazuje na balansiranje 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 obrasca za povratne informacije u nastavku. Za više informacija pogledajte Nginx dokumentaciju o korištenju Nginxa kao HTTP balansera opterećenja.