Implementacija Nginx-a sa Haproxy-em za Load Balancing

15.05.2017.

Živimo u vremenu kad je visoka dostupnost i brzina mrežnih servisa kritičan dio svake infrastrukture, te korištenjem HAProxy reverznog proxy poslužitelja i njegovih mogućnosti za raspodjelu opterećenja, te visoku dostupnost postižemo da su takvi sustavi imuni na kvarove na infrastrukturnom dijelu sustava, što nam omogućava nesmetano korištenje takvih servisa u slučaju hardverskih grešaka, redovitog održavanja i slično.

HAProxy je besplatan, moćan, fleksibilan i jednostavan reverzni proxy koji pruža mogućnost Load Balancinga. Program je napisao Willy Tarreau, te također podržava SSL, kompresiju, keep-alive, konfigurabilan ispis logova te izmjenjivanje zaglavlja (headera) u zahtjevu. S obzirom da nije zahtjevan i koristi malo resursa za svoj rad koriste ga stranice poput StackOverflow i Github. U nastavku teksta ćemo opisati kako postaviti HAProxy proxy poslužitelj koji će raspodjeljivati opterećenje na dva Nginx web poslužitelja.

 

Osnove HAProxy-a

HAProxy podržava dva načina rada, TCP layer-4 način rada u kojem HAProxy prosljeđuje pakete na određenoj IP adresi i tcp portu prema konfiguriranim backend poslužiteljima, te HTTP layer-7 način rada u kojem HAProxy parsira HTTP zahtjeve te ih prosljeđuje web poslužiteljima.Ovdje će se koristiti HTTP-layer7 način rada.

 

Vrste raspodjele opterećenja (Load balancing-a)

 

Roundrobin

Ovo je najjednostavniji algoritam za raspodjelu opterećenja, i radi tako da svaki novi zahtjev prosljeđuje sljedećem konfiguriranom backend web poslužitelju.

 

Lastconn

HAProxy poslužitelj prosljeđuje zahtjev na backend web poslužitelj sa najmanjim brojem zahtjeva i jako je dobar u slučaju velikih opterećenja.

 

Source

U ovom slučaju HAProxy poslužitelj prosljeđuje zahtjev prema backend poslužiteljima na osnovi klijentske IP adrese.

 

 

Implementacija Nginx-a sa Haproxy-em za Load Balancing

 

 

Logički prikaz

 

Sistemski zahtjevi i mrežna konfiguracija


3 CentOS 7 poslužitelja:
HAProxy 192.168.0.101
nginx1 192.168.0.201
nginx2 192.168.0.202

 

HAProxy poslužitelj

Instaliramo HAProxy

 

yum install haproxy

 

Kopiramo zadanu konfiguracijsku datoteku

 

cd /etc/haproxy
cp haproxy.cfg haproxy.cfg.back

 

Te u /etc/haproxy/haproxy.cfg zamijenimo sve frontend i backend dijelove konfiguracije

 

frontend haproxy *:80 ### postavljamo frontend sa imenom haproxy da sluša na portu 80 
default_backend websrv ### postavljamo ime backenda na koji će se usmjeravati zahtjevi 

backend websrv ### definiramo backend koji smo prethodno postavili 
balance roundrobin ### definiramo način rada rada HAProxy poslužitelja 
server nginx1 192.168.0.201 check ### definiramo backend poslužitelje u ovom slučaju nginx1 i nginx2 
server nginx2 192.168.0.202 check

 

Konfiguriramo firewalld vatrozid da propusti tcp port 80

 

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

 

Omogućimo samopokretanje te pokrenemo HAProxy servis

 

systemctl enable haproxy
systemctl start haproxy

 

Nginx1 i Nginx2 web poslužitelji

 

Omogućimo EPEL repozitorij te instaliramo Nginx servis

 

yum install epel-release
yum install nginx

 

Kreiramo testne index.html datoteke

 

cd /usr/share/nginx/html
echo “<h1>nginx1</h1> > index.html
### na nginx2
echo “<h1>nginx2</h1> > index.html

 

Konfiguriramo firewalld vatrozid da propusti tcp port 80

 

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

 

Omogućimo samopokretanje te pokrenemo Nginx servis

 

systemctl enable nginx
systemctl start nginx

 

Testiranje

 

U web pregledniku otvorimo adresu:
http://192.168.0.101

Osvježavanjem stranice tipkom F5 trebala bi se otvarati svaki put druga index.html datoteka ovisno na koji poslužitelj je preusmjeren zahtjev u ovom slučaju nginx1 ili nginx2. Ovime smo uspješno kreirali raspodjelu opterećenja pomoću HAProxy poslužitelja na dva Nginx web poslužitelja.