Ž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.

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.