Kako postaviti HAProxy kao balanser opterećenja za Nginx na CentOS 8


Kako bi se osigurala maksimalna dostupnost web aplikacija, skalabilnost i visoka izvedba, sada je uobičajeno implementirati tehnologije koje uvode redundanciju, kao što je klasteriranje poslužitelja i uravnoteženje opterećenja. Na primjer, postavljanje klastera poslužitelja koji svi pokreću istu(e) aplikaciju(e), a zatim postavljanje(a) balansera opterećenja ispred njih za distribuciju prometa.

HAProxy je open-source, moćan, visokoučinkovit, pouzdan, siguran i široko korišten visokodostupan TCP/HTTP balanser opterećenja, proxy poslužitelj i SSL/TLS terminator izgrađen za web stranice s vrlo visokim prometom. Pouzdano dobro radi na operativnim sustavima Linux, Solaris, FreeBSD, OpenBSD kao i AIX.

Ovaj vodič pokazuje kako postaviti namjenski balanser opterećenja visoke dostupnosti s HAProxy na CentOS 8 za kontrolu prometa u klasteru NGINX web poslužitelja. Također pokazuje kako konfigurirati SSL/TLS završetak u HAProxy.

Preduvjeti:

Ukupno 4 poslužitelja s minimalnom instalacijom CentOS 8.

Postavljanje testnog okruženja

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Korak 1: Postavljanje Nginx HTTP poslužitelja na klijentskim računalima

1. Prijavite se na sva vaša CentOS 8 klijentska računala i instalirajte Nginx web poslužitelj koristeći dnf upravitelj paketa kao što je prikazano.

dnf install Nginx

2. Zatim pokrenite uslugu Nginx, za sada joj omogućite automatsko pokretanje pri pokretanju sustava i potvrdite da radi provjerom statusa pomoću systemctl-a naredbe (učinite ovo na svim klijentskim računalima).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Također, ako je usluga vatrozida pokrenuta na svim klijentskim strojevima (što možete provjeriti pokretanjem systemctl start firewalld), morate dodati HTTP i HTTPS usluge u konfiguraciji vatrozida koje omogućuju prolazak zahtjeva iz balansera opterećenja kroz vatrozid do web poslužitelja Nginx. Zatim ponovno učitajte uslugu firewalld kako biste izvršili nove promjene (učinite to na svim klijentskim računalima).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Zatim otvorite web-preglednik na svojim lokalnim računalima i provjerite radi li instalacija Nginx. Za navigaciju koristite IP adresu klijenta, nakon što vidite Nginx testnu stranicu, to znači da web poslužitelj instaliran na klijentskom računalu radi ispravno.

5. Zatim moramo izraditi testne stranice na klijentskim strojevima koje ćemo kasnije koristiti za testiranje postavki HAProxy.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Korak 2: Instaliranje i konfiguriranje HAProxy poslužitelja na CentOS 8

6. Sada instalirajte HAProxy paket na HAProxy poslužitelj izvođenjem sljedeće naredbe.

dnf install haproxy

7. Zatim pokrenite uslugu HAProxy, omogućite joj automatsko pokretanje pri dizanju sustava i provjerite njen status.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Sada ćemo konfigurirati HAProxy pomoću sljedeće konfiguracijske datoteke.

vi /etc/haproxy/haproxy.cfg

Konfiguracijska datoteka podijeljena je u četiri glavna odjeljka.

  • globalne postavke – postavlja parametre za cijeli proces.
  • zadane postavke – ovaj odjeljak postavlja zadane parametre za sve ostale odjeljke nakon njegove deklaracije.
  • sučelje – ovaj odjeljak opisuje skup slušajućih utičnica koje prihvaćaju klijentske veze.
  • Pozadina – ovaj odjeljak opisuje skup poslužitelja na koje će se proxy povezati za prosljeđivanje dolaznih veza.

Da biste razumjeli opcije pod globalnim postavkama i zadanim postavkama, pročitajte dokumentaciju HAProxy (veza navedena na kraju članka). Za ovaj vodič koristit ćemo zadane postavke.

Postavljanje HAProxy zapisivanja

9. HAProxy kada se jednom postavi, igrat će značajnu ulogu u vašoj IT infrastrukturi, stoga je konfiguriranje zapisivanja za njega osnovni zahtjev; ovo vam omogućuje da dobijete uvid u svaku vezu s vašim backend web poslužiteljima.

Parametar dnevnika (istaknut na sljedećoj snimci zaslona) izjavljuje globalni Syslog poslužitelj (kao što je rsyslog zadani u CentOS-u) koji će primati poruke dnevnika. Ovdje se može deklarirati više od jednog poslužitelja.

Zadana konfiguracija upućuje na localhost (127.0.0.1), a local2 je zadani kod objekta koji se koristi za prepoznavanje HAProxy poruka dnevnika pod rsyslog.

10. Zatim trebate reći rsyslog poslužitelju kako da prima i obrađuje HAProxy poruke dnevnika. Otvorite rsyslog konfiguracijsku datoteku u /etc/rsyslog.conf ili kreirajte novu datoteku unutar /etc/rsyslog.d direktorija, na primjer /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Kopirajte i zalijepite sljedeću konfiguraciju za prikupljanje dnevnika s UDP na zadanom priključku 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Također dodajte ove retke da biste uputili rsyslog da piše u dvije odvojene datoteke dnevnika na temelju ozbiljnosti, gdje je local2 kod usluge definiran u gornjoj konfiguraciji HAProxy.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Spremite datoteku i zatvorite je. Zatim ponovno pokrenite uslugu rsyslog kako biste primijenili nedavne promjene.

systemctl restart rsyslog

Konfiguriranje HAProxy prednjeg i stražnjeg dijela

12. U ovom ćemo odjeljku pokazati kako konfigurirati prednji i pozadinski proxy. Vratite se na HAProxy konfiguracijsku datoteku i izmijenite zadane prednje i pozadinske odjeljke kako slijedi. Nećemo ulaziti u detaljno objašnjenje svakog parametra, uvijek se možete pozvati na službenu dokumentaciju.

Sljedeća konfiguracija definira odjeljak slušanja koji se koristi za posluživanje stranice HAProxy Stats. Parametar bind dodjeljuje slušatelja danoj IP adresi (* za sve u ovom slučaju) i port (9000 >).

Postavka statistike enable omogućuje stranicu sa statistikom kojoj će se pristupati pomoću URI /stats (tj. http://server_ip:9000/stats) .

Postavka statistike auth koristi se za dodavanje osnovne provjere autentičnosti prilikom pristupa stranici (zamijenite haproxy i Lostp@1ss korisničkim imenom i lozinkom vašeg izbor).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. Sljedeća konfiguracija definira odjeljak sučelja pod nazivom TL (možete dati ime po svom ukusu). Parametar mode definira način rada u kojem HAProxy radi.

Parametar acl (Access Control List) koristi se za donošenje odluke na temelju sadržaja izdvojenog iz zahtjeva. U ovom primjeru, zahtjev se smatra običnim HTTP ako nije napravljen preko SSL-a.

Zatim se postavka http-request set-header koristi za dodavanje HTTP zaglavlja zahtjevu. Ovo pomaže obavijestiti Nginx da je početni zahtjev upućen preko HTTP-a (ili preko porta 80).

Direktiva default_backend ili use_backend definira pozadinske poslužitelje, u ovom slučaju na koje upućuje TL_web_servers.

Imajte na umu da će HAProxy vratiti “503 Service Unavailable error” ako zahtjev nije preusmjeren putem use_backend ili default_backend > direktiva.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Zatim moramo definirati pozadinski odjeljak gdje postavka ravnoteža definira kako HAProxy odabire pozadinske poslužitelje za obradu zahtjeva ako ne metoda postojanosti poništava taj odabir.

Direktiva kolačića omogućuje postojanost kolačića, upućuje HAProxy da pošalje kolačić pod nazivom SERVERID klijentu i da ga povežete s ID poslužitelja koji je dao početni odgovor.

Direktiva server koristi se za definiranje uzvodnih poslužitelja u formatu sever_name (npr. websrv1), server_IP:port i opcije.

Jedna ključna opcija je provjera koja govori HAProxyju da nastavi provjeravati dostupnost poslužitelja i izvješćuje na stranici statistike.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Komentirajte sve druge odjeljke sučelja i pozadine kao što je prikazano na snimci zaslona koja slijedi. Spremite datoteku i zatvorite je.

15. Sada ponovno pokrenite uslugu HAProxy kako biste primijenili nove promjene.

systemctl restart haproxy

16. Zatim provjerite jesu li HTTP (priključak 80) i HTTPS (priključak 433) usluge se otvaraju u vatrozidu za prihvaćanje zahtjeva klijenta kako slijedi. Također, otvorite priključak 9000 u vatrozidu za pristup stranici statistike i ponovno učitajte postavke vatrozida.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

Korak 3: Testiranje postavljanja HAProxyja i pregled statistike

17. Sada je vrijeme da testirate postavku HAPrxoy. Na lokalnom stolnom računalu s kojeg pristupate svim poslužiteljima dodajte sljedeći redak u datoteku /etc/hosts kako biste nam omogućili korištenje lažne domene stranice.

10.42.0.247  www.tecmint.lan

18. Zatim otvorite preglednik i krećite se pomoću adrese poslužitelja ili domene stranice.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Za pristup stranici statistike HAProxy koristite sljedeću adresu.

http://10.42.0.247:9000/stats

Zatim upotrijebite korisničko ime i lozinku koje ste definirali u HAProxy konfiguracijskoj datoteci (pogledajte parametar auth statistike).

Nakon uspješne prijave, doći ćete na stranicu statistike HAProxy koja vam prikazuje metrike koje pokrivaju zdravlje vaših poslužitelja, trenutne stope zahtjeva, vremena odgovora i još mnogo toga.

Da bismo demonstrirali kako funkcionira izvješće o statusu u vezi s radom kodova boja, stavili smo jedan od pozadinskih poslužitelja.

Korak 4: Konfiguriranje HTTPS-a u HAProxy pomoću samopotpisanog SSL certifikata

20. U ovom posljednjem odjeljku, pokazat ćemo kako konfigurirati SSL/TLS za zaštitu svih komunikacija između HAProxy poslužitelja i klijenta. HAProxy podržava četiri glavna načina konfiguracije HTTPS, ali za ovaj vodič ćemo koristiti SSL/TLS rasterećenje.

U načinu rasterećenja SSL/TLS, HAProxy dešifrira promet na strani klijenta i povezuje se u čistom prometu s pozadinskim poslužiteljima.

Započet ćemo s izradom certifikata i ključa kao što je prikazano (odgovorite na pitanja u skladu s tim na temelju podataka o vašoj tvrtki tijekom izrade certifikata, kao što je istaknuto na snimci zaslona).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. Zatim otvorite konfiguracijsku datoteku HAProxy (/etc/haproxy/haproxy.cfg) i uredite prednji odjeljak.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

Spremite datoteku i zatvorite je.

22. Zatim ponovno pokrenite HAProxy uslugu kako biste primijenili nove promjene.

systemctl restart haproxy.service

23. Zatim otvorite web preglednik i pokušajte još jednom pristupiti stranici. Preglednik će prikazati pogrešku zbog samopotpisanog certifikata, kliknite Napredno za nastavak.

To je sve za sada! Svaka web aplikacija ima vlastiti skup zahtjeva, morate dizajnirati i konfigurirati uravnoteženje opterećenja kako bi odgovaralo vašoj IT infrastrukturi i zahtjevima aplikacije.

Da biste dobili više uvida u neke od konfiguracijskih opcija koje se koriste u ovom vodiču, i općenito kako koristiti HAProxy, pogledajte službenu dokumentaciju izdanja zajednice HAProxy ili dokumentaciju verzije HAProxy za poduzeća. Sva pitanja ili misli možete postaviti putem donjeg obrasca za povratne informacije.