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.