Kako nastaviti HAProxy kot izravnalnik obremenitve za Nginx na CentOS 8


Da bi zagotovili največjo razpoložljivost, razširljivost in visoko zmogljivost spletnih aplikacij, je zdaj običajno uvajati tehnologije, ki uvajajo redundanco, na primer razvrščanje strežnikov v skupine in uravnoteženje obremenitve. Na primer nastavitev grozda strežnikov, ki izvajajo vse iste aplikacije, in nato razporeditev izravnalnikov obremenitve pred njimi za distribucijo prometa.

HAProxy je odprtokodna, zmogljiva, visoko zmogljiva, zanesljiva, varna in široko uporabljena naprava za uravnoteženje obremenitve TCP/HTTP z visoko razpoložljivostjo, proxy strežnik in SSL/TLS terminator, zgrajen za zelo velika spletna mesta. Zanesljivo dobro deluje v operacijskih sistemih Linux, Solaris, FreeBSD, OpenBSD in AIX.

V tem priročniku je prikazano, kako v CentOS 8 s HAProxy nastaviti poseben izravnalnik obremenitve za visoko razpoložljivost za nadzor prometa v gruči spletnih strežnikov NGINX. Prav tako prikazuje, kako konfigurirati zaključevanje SSL/TLS v HAProxy.

Skupaj 4 strežniki z minimalno namestitvijo CentOS 8.

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

1. korak: Nastavitev strežnika Nginx HTTP na odjemalskih strojih

1. Prijavite se v vse odjemalske računalnike CentOS 8 in namestite spletni strežnik Nginx z upraviteljem paketov dnf, kot je prikazano.

# dnf install Nginx

2. Nato zaženite storitev Nginx, za zdaj omogočite samodejni zagon ob zagonu sistema in potrdite, da deluje in preverite njeno stanje s pomočjo ukazov systemctl (naredite to na vseh odjemalskih strojih).

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

3. Če se storitev požarnega zidu izvaja na vseh odjemalskih računalnikih (kar lahko preverite z zagonom sistemskega požarnega zidu), morate v konfiguraciji požarnega zidu dodati storitve HTTP in HTTPS, da omogočite prehod zahtev izravnalnika obremenitve skozi požarni zid na spletne strežnike Nginx. Nato znova naložite storitev požarnega zidu, da izvedete nove spremembe (to storite na vseh odjemalskih računalnikih).

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

4. Nato na lokalnih računalnikih odprite spletni brskalnik in preizkusite, ali namestitev Nginxa deluje dobro. Za navigacijo uporabite odjemalske IP-je. Ko vidite preskusno stran Nginx, to pomeni, da spletni strežnik, nameščen na odjemalskem računalniku, deluje pravilno.

5. Nato moramo na odjemalskih strojih ustvariti preizkusne strani, ki jih bomo kasneje uporabili za preizkus nastavitve 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

2. korak: Namestitev in konfiguracija strežnika HAProxy na CentOS 8

6. Zdaj namestite paket HAProxy na strežnik HAProxy, tako da zaženete naslednji ukaz.

# dnf install haproxy

7. Nato zaženite storitev HAProxy, omogočite samodejni zagon ob zagonu sistema in preverite njeno stanje.

# systemctl start haproxy
# systemctl enable haproxy
# systemctl status haproxy

8. Zdaj bomo konfigurirali HAProxy z uporabo naslednje konfiguracijske datoteke.

# vi /etc/haproxy/haproxy.cfg

Konfiguracijska datoteka je razdeljena na štiri glavne odseke.

  • globalne nastavitve - nastavi parametre za celoten proces.
  • privzeto - ta razdelek nastavi privzete parametre za vse druge odseke, ki sledijo njegovi izjavi.
  • frontend - ta razdelek opisuje nabor vtičnic za poslušanje, ki sprejemajo odjemalske povezave.
  • Backend - ta razdelek opisuje nabor strežnikov, na katere se bo proxy povezal za posredovanje dohodnih povezav.

Če želite razumeti možnosti pod globalnimi nastavitvami in privzetimi nastavitvami, preberite dokumentacijo HAProxy (povezava na koncu članka). V tem priročniku bomo uporabili privzete vrednosti.

9. HAProxy, ko bo enkrat uveden, bo imel pomembno vlogo v vaši IT-infrastrukturi, zato je konfiguriranje beleženja zanj osnovna zahteva; to vam omogoča vpogled v vsako povezavo z vašimi zalednimi spletnimi strežniki.

Parameter dnevnika (označen na naslednjem posnetku zaslona) razglasi globalni strežnik Syslog (kot je rsyslog privzeti v CentOS), ki bo prejemal sporočila dnevnika. Tu je mogoče prijaviti več strežnikov.

Privzeta konfiguracija kaže na localhost (127.0.0.1), local2 pa je privzeta koda objekta, ki se uporablja za identifikacijo sporočil dnevnika HAProxy pod rsyslog.

10. Nato morate strežniku rsyslog povedati, kako prejemati in obdelovati sporočila dnevnika HAProxy. Odprite konfiguracijsko datoteko rsyslog v /etc/rsyslog.conf ali ustvarite novo datoteko v imeniku /etc/rsyslog.d, na primer /etc/rsyslog.d/haproxy.conf.

# vi /etc/rsyslog.d/haproxy.conf

Kopirajte in prilepite naslednjo konfiguracijo za zbiranje dnevnika z UDP na privzetih vratih 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Te vrstice dodajte tudi, da rsyslog naročite, naj piše v dve ločeni dnevniški datoteki glede na resnost, kjer je local2 koda objekta, definirana v zgornji konfiguraciji HAProxy.

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

11. Shranite datoteko in jo zaprite. Nato znova zaženite storitev rsyslog, da uporabite nedavne spremembe.

# systemctl restart rsyslog

12. V tem poglavju bomo prikazali, kako konfigurirati prednji in zadnji vmesnik. Vrnite se v konfiguracijsko datoteko HAProxy in spremenite privzeti prednji in zaledni odsek, kot sledi. Ne bomo se spuščali v podrobno razlago posameznega parametra, vedno se lahko sklicujete na uradno dokumentacijo.

Naslednja konfiguracija opredeljuje odsek poslušanja, ki se uporablja za strežnik strani HAProxy Stats. Parameter vezanja dodeli poslušalcu določenemu naslovu IP (v tem primeru * za vse) in vratom (9000).

Nastavitev za omogočanje statistike omogoča stran s statistiko, do katere boste dostopali z uporabo URI/stats (tj. http:// server_ip: 9000/stats ).

Nastavitev za statistiko statistike se uporablja za dodajanje osnovne overitve pri dostopu do strani (zamenjajte haproxy in [email z uporabniškim imenom in geslom po vaši izbiri).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:[email 

13. Naslednja konfiguracija definira prednji odsek, imenovan TL (lahko mu daste ime po vašem okusu). Parameter načina definira način, v katerem deluje HAProxy.

Parameter acl (seznam nadzora dostopa) se uporablja za sprejemanje odločitev na podlagi vsebine, izpisane iz zahteve. V tem primeru se zahteva šteje za navaden HTTP, če ni poslana prek SSL.

Nato nastavitev glave nastavitve http-zahteve uporabimo za dodajanje glave HTTP zahtevi. To pomaga obveščati Nginx, da je bila prvotna zahteva poslana prek HTTP (ali prek vrat 80).

Direktiva default_backend ali use_backend določa zaledne strežnike, v tem primeru na katere se sklicuje TL_web_servers.

Upoštevajte, da bo HAProxy vrnil\"503 Service Unavailable error", če zahteve ne preusmeri direktiva use_backend ali default_backend.

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. Nato moramo definirati zaledni odsek, kjer nastavitev ravnovesja določa, kako HAProxy izbere zaledne strežnike za obdelavo zahteve, če nobena metoda vztrajanja ne preglasi te izbire.

Direktiva o piškotkih omogoča obstojnost na osnovi piškotkov, HAProxy pa naroči, naj odjemalcu pošlje piškotek z imenom SERVERID in ga poveže z ID-jem strežnika, ki je dal začetni odgovor.

Strežniška direktiva se uporablja za definiranje strežnikov v zgornjem toku v obliki sever_name (npr. Websrv1), server_IP: vrata in možnosti.

Ena ključnih možnosti je preverjanje, ki pove, da HAProxy še naprej preverja razpoložljivost strežnika in poroča na strani s statistiko.

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 druge odseke vmesnika in zaledja, kot je prikazano na posnetku zaslona, ki sledi. Datoteko shranite in zaprite.

15. Zdaj znova zaženite storitev HAProxy, da uveljavite nove spremembe.

# systemctl restart haproxy

16. Nato zagotovite, da sta v požarnem zidu odprti storitvi HTTP (vrata 80) in HTTPS (vrata 433), ki sprejemajo zahteve odjemalcev, kot sledi. Prav tako odprite vrata 9000 v požarnem zidu za dostop do strani s statistiko in znova naložite nastavitve požarnega zidu.

# 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

3. korak: Testiranje namestitve HAProxy in ogled statistike

17. Zdaj je čas za preizkus nastavitve HAPrxoy. Na lokalni namizni računalnik, od koder dostopate do vseh strežnikov, dodajte naslednjo vrstico v datoteko/etc/hosts, da nam omogočimo uporabo lažne domene spletnega mesta.

10.42.0.247  www.tecmint.lan

18. Nato odprite brskalnik in krmarite z uporabo naslova strežnika ali domene spletnega mesta.

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

19. Za dostop do strani s statistiko HAProxy uporabite naslednji naslov.

http://10.42.0.247:9000/stats

Nato uporabite uporabniško ime in geslo, ki ste ju določili v konfiguracijski datoteki HAProxy (glejte parameter avtomatske statistike).

Po uspešni prijavi se boste znašli na strani s statistiko HAProxy, ki prikazuje meritve, ki zajemajo stanje vaših strežnikov, trenutne stopnje zahtev, odzivne čase in še veliko več.

Za prikaz delovanja poročila o stanju glede barvnih kod smo postavili enega od zalednih strežnikov.

4. korak: Konfiguriranje HTTPS v HAProxy z uporabo samopodpisanega potrdila SSL

20. V tem zadnjem poglavju bomo prikazali, kako konfigurirati SSL/TLS za zaščito vseh komunikacij med strežnikom HAProxy in odjemalcem. HAProxy podpira štiri glavne načine konfiguracije HTTPS, vendar bomo v tem priročniku uporabili SSL/TLS razkladanje.

V načinu razkladanja SSL/TLS HAProxy dešifrira promet na odjemalski strani in se v jasnem prometu poveže z zalednimi strežniki.

Začeli bomo z ustvarjanjem potrdila in ključa, kot je prikazano (na vprašanja odgovorite v skladu s podatki vašega podjetja med ustvarjanjem potrdila, kot je poudarjeno na posnetku 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. Nato odprite konfiguracijsko datoteko HAProxy (/etc/haproxy/haproxy.cfg) in uredite prednji del.

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

Datoteko shranite in zaprite.

22. Nato znova zaženite storitev HAProxy, da uveljavite nove spremembe.

# systemctl restart haproxy.service

23. Nato odprite spletni brskalnik in poskusite še enkrat dostopati do spletnega mesta. Brskalnik bo prikazal napako zaradi samopodpisanega potrdila, za nadaljevanje kliknite Napredno.

To je vse za zdaj! Vsaka spletna aplikacija ima svoj nabor zahtev, morate oblikovati in konfigurirati uravnoteženje obremenitve, da bo ustrezalo vaši infrastrukturi IT in zahtevam aplikacije.

Če želite več vpogleda v nekatere možnosti konfiguracije, uporabljene v tem priročniku, in na splošno o uporabi HAProxy, glejte uradno dokumentacijo o različici HAProxy za podjetja. Vsa vprašanja ali razmišljanja lahko objavite prek spodnjega obrazca za povratne informacije.