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


Kako bi se osigurala maksimalna dostupnost web aplikacija, skalabilnost i visoke performanse, sada je uobičajeno implementirati tehnologije koje uvode redundantnost, kao što su grupiranje servera i balansiranje opterećenja. Na primjer, postavljanje klastera servera koji svi pokreću istu aplikaciju(e) i zatim postavljanje balansera(e) opterećenja ispred njih da distribuiraju promet.

HAProxy je open-source, moćan, visokih performansi, pouzdan, siguran i široko korišten TCP/HTTP balansator opterećenja visoke dostupnosti, proxy server i SSL/TLS terminator napravljen za web stranice sa vrlo velikom posjećenošću. Pouzdano dobro radi na Linux, Solaris, FreeBSD, OpenBSD kao i na AIX operativnim sistemima.

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

Preduvjeti:

Ukupno 4 servera sa 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: Podešavanje Nginx HTTP servera na klijentskim mašinama

1. Prijavite se na sve svoje klijentske mašine CentOS 8 i instalirajte Nginx web server koristeći dnf menadžer paketa kao što je prikazano.

dnf install Nginx

2. Zatim pokrenite Nginx uslugu, za sada, omogućite joj da se automatski pokreće pri pokretanju sistema i potvrdite da je pokrenut provjerom statusa, koristeći systemctl komande (učinite to na svim klijentskim mašinama).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Također, ako firewalld servis radi na svim klijentskim mašinama (što možete provjeriti pokretanjem systemctl start firewalld), morate dodati HTTP i HTTPS usluge u konfiguraciji zaštitnog zida koje omogućavaju da zahtjevi iz balansera opterećenja prolaze kroz zaštitni zid do Nginx web servera. Zatim ponovo učitajte uslugu firewalld da izvršite nove promjene (učinite to na svim klijentskim mašinama).

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

4. Zatim otvorite web pretraživač na vašim lokalnim mašinama i testirajte da li Nginx instalacija radi dobro. Koristite IP-ove klijenta za navigaciju, kada vidite Nginx testnu stranicu, to znači da web server instaliran na klijentskoj mašini radi ispravno.

5. Zatim moramo kreirati test stranice na klijentskim mašinama koje ćemo kasnije koristiti za testiranje HAProxy podešavanja.

----------- 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: Instalacija i konfiguracija HAProxy servera na CentOS 8

6. Sada instalirajte HAProxy paket na HAProxy server tako što ćete pokrenuti sljedeću naredbu.

dnf install haproxy

7. Zatim pokrenite uslugu HAProxy, omogućite joj da se automatski pokrene pri pokretanju sistema i provjerite njen status.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Sada ćemo konfigurirati HAProxy koristeći sljedeću konfiguracijsku datoteku.

vi /etc/haproxy/haproxy.cfg

Konfiguracijski fajl je podijeljen u četiri glavna dijela.

  • globalne postavke – postavlja parametre za cijeli proces.
  • default – ovaj odjeljak postavlja zadane parametre za sve ostale sekcije nakon njegove deklaracije.
  • frontend – ovaj odjeljak opisuje skup utičnica za slušanje koje prihvataju klijentske veze.
  • Backend – ovaj odjeljak opisuje skup servera na koje će se proxy povezati radi prosljeđivanja dolaznih veza.

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

Postavljanje HAProxy zapisnika

9. HAProxy kada se jednom implementira igrat će značajnu ulogu u vašoj IT infrastrukturi, tako da je konfiguriranje evidentiranja za njega osnovni zahtjev; ovo vam omogućava da dobijete uvid u svaku vezu sa vašim backend web serverima.

log parametar (istaknut na sljedećem snimku ekrana) deklarira globalni Syslog server (kao što je rsyslog zadani u CentOS-u) koji će primati poruke dnevnika. Ovdje se može deklarirati više od jednog servera.

Zadana konfiguracija ukazuje na localhost (127.0.0.1) i local2 je zadani kod objekta koji se koristi za identifikaciju HAProxy dnevnik poruka pod rsyslog.

10. Zatim morate reći rsyslog serveru kako da prima i obrađuje HAProxy poruke dnevnika. Otvorite konfiguracijsku datoteku rsyslog 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 da prikupite dnevnik sa UDP na zadanom portu 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Također dodajte ove redove da biste uputili rsyslog da piše u dvije odvojene datoteke dnevnika na osnovu ozbiljnosti, gdje je local2 kod objekta definiran u HAProxy konfiguraciji iznad.

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

11. Sačuvajte fajl i zatvorite ga. Zatim ponovo pokrenite uslugu rsyslog da primijenite nedavne promjene.

systemctl restart rsyslog

Konfiguriranje HAProxy front-end i back-end

12. U ovom odeljku ćemo pokazati kako da konfigurišete front-end i back-end proxy. Vratite se na HAProxy konfiguracijsku datoteku i izmijenite zadane prednje i pozadinske odjeljke kako slijedi. Nećemo ulaziti u detaljna objašnjenja svakog parametra, uvijek možete pogledati zvaničnu dokumentaciju.

Sljedeća konfiguracija definira odjeljak slušaj koji se koristi za posluživanje stranice HAProxy statistika. Parametar bind dodjeljuje slušaocu datu IP adresu (* za sve u ovom slučaju) i port (9000 >).

Postavka omogući statistiku omogućava stranicu statistike kojoj će se pristupiti pomoću URI /stats (tj. http://server_ip:9000/stats) .

Postavka statistike auth se koristi za dodavanje osnovne autentifikacije 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 frontend odjeljak pod nazivom TL (možete dati ime po svom ukusu). Parametar mode definira način rada u kojem HAProxy radi.

Parametar acl (Lista kontrole pristupa) se koristi za donošenje odluke na osnovu 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 u zahtjev. Ovo pomaže u informiranju Nginxa da je početni zahtjev napravljen preko HTTP (ili preko porta 80).

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

Imajte na umu da će HAProxy vratiti "503 Service Nedostupna greška " ako zahtjev ne usmjeri 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 backend odjeljak u kojem postavka balans definira kako HAProxy odabire pozadinske servere za obradu zahtjeva ako ne metoda persistence nadjačava taj odabir.

Direktiva cookie omogućava postojanost baziranu na kolačićima, ona nalaže HAProxy da pošalje kolačić pod nazivom SERVERID klijentu i da ga povežete sa ID-om servera koji je dao početni odgovor.

Direktiva server se koristi za definiranje upstream servera u formatu sever_name (npr. websrv1), server_IP:port i opcije.

Jedna ključna opcija je provjera koja govori HAProxy da nastavi provjeravati dostupnost servera i izvještavati na stranici sa statistikom.

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 prednje i pozadinske sekcije kao što je prikazano na snimku ekrana koji slijedi. Sačuvajte datoteku i zatvorite je.

15. Sada ponovo pokrenite HAProxy uslugu da primijenite nove promjene.

systemctl restart haproxy

16. Zatim provjerite da li su HTTP (port 80) i HTTPS (port 433) servisi se otvaraju u firewall-u kako bi prihvatili zahtjeve klijenata na sljedeći način. Također, otvorite port 9000 u zaštitnom zidu za pristup stranici sa statistikom i ponovo učitajte postavke zaštitnog zida.

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 HAProxy podešavanja i pregled statistike

17. Sada je vrijeme za testiranje HAPrxoy podešavanja. Na lokalnoj radnoj površini sa koje pristupate svim serverima, dodajte sljedeći red u datoteku /etc/hosts da biste nam omogućili korištenje lažne domene stranice.

10.42.0.247  www.tecmint.lan

18. Zatim otvorite pretraživač i navigirajte koristeći ili adresu servera ili domenu web lokacije.

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 koristite korisničko ime i lozinku koje ste definirali u HAProxy konfiguracijskoj datoteci (pogledajte parametar stats auth).

Nakon uspješne prijave, doći ćete na stranicu statistike HAProxy koja vam pokazuje metriku koja pokriva zdravlje vaših servera, trenutne stope zahtjeva, vrijeme odgovora i još mnogo toga.

Da bismo demonstrirali kako funkcionira izvještaj o statusu u vezi sa funkcionisanjem kodova boja, postavili smo jedan od pozadinskih servera.

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

20. U ovom završnom odjeljku ćemo pokazati kako konfigurirati SSL/TLS da osigura svu komunikaciju između HAProxy servera i klijenta. HAProxy podržava četiri glavna HTTPS načina konfiguracije, ali za ovaj vodič ćemo koristiti SSL/TLS rasterećenje.

U SSL/TLS načinu oslobađanja, HAProxy dešifruje promet na strani klijenta i povezuje se u čistom prometu sa backend serverima.

Počećemo kreiranjem sertifikata i ključa kao što je prikazano (odgovarajte na pitanja u skladu s tim na osnovu detalja vaše kompanije tokom kreiranja sertifikata, kao što je istaknuto na snimku ekrana).

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 HAProxy konfiguracijsku datoteku (/etc/haproxy/haproxy.cfg) i uredite prednji dio.

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

Sačuvajte datoteku i zatvorite je.

22. Zatim ponovo pokrenite HAProxy uslugu da primijenite nove promjene.

systemctl restart haproxy.service

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

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

Da biste dobili više uvida u neke od opcija konfiguracije koje se koriste u ovom vodiču i općenito o tome kako koristiti HAProxy, pogledajte zvaničnu dokumentaciju o izdanju HAProxy zajednice ili dokumentaciju o HAProxy korporativnoj verziji. Možete postaviti bilo kakva pitanja ili misli putem obrasca za povratne informacije ispod.