Kif Twaqqaf HAProxy bħala Load Balancer għal Nginx fuq CentOS 8


Biex tiġi żgurata d-disponibbiltà, l-iskalabbiltà u l-prestazzjoni għolja tal-applikazzjonijiet tal-web massimi, issa huwa komuni li jiġu implimentati teknoloġiji li jintroduċu redundancy, bħall-raggruppament tas-server u l-ibbilanċjar tat-tagħbija. Per eżempju, it-twaqqif ta 'cluster ta' servers li kollha jmexxu l-istess applikazzjoni(i) u mbagħad skjerament load balancer(s) quddiemhom biex iqassmu t-traffiku.

HAProxy huwa bilanċjar tat-tagħbija TCP/HTTP b'sors miftuħ, b'saħħtu, ta' prestazzjoni għolja, affidabbli, sigur u użat ħafna b'disponibbiltà għolja, proxy server u terminatur SSL/TLS mibni għal siti web ta' traffiku għoli ħafna. Hija taħdem tajjeb b'mod affidabbli fuq Linux, Solaris, FreeBSD, OpenBSD kif ukoll sistemi operattivi AIX.

Din il-gwida turi kif twaqqaf bilanċjar tat-tagħbija ta 'disponibbiltà għolja dedikat b'HAProxy fuq CentOS 8 biex tikkontrolla t-traffiku f'grupp ta' servers tal-web NGINX. Juri wkoll kif tikkonfigura t-terminazzjoni SSL/TLS f'HAProxy.

Total ta '4 servers b'installazzjoni minima ta' 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

Pass 1: Twaqqif ta 'Nginx HTTP Server fuq il-Magni tal-Klijent

1. Idħol fil-magni kollha tal-klijenti CentOS 8 tiegħek u installa s-server tal-web Nginx billi tuża l-maniġer tal-pakketti dnf kif muri.

# dnf install Nginx

2. Sussegwentement, ibda s-servizz Nginx, għalissa, ippermettilu jibda awtomatikament fil-boot tas-sistema u kkonferma li huwa jaħdem billi tivverifika l-istatus tagħha, billi tuża l-kmandi systemctl (agħmel dan fuq il-magni tal-klijenti kollha).

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

3. Ukoll, jekk is-servizz firewalld qed jaħdem fuq il-magni tal-klijenti kollha (li tista 'tiċċekkja billi tħaddem systemctl start firewalld), trid iżżid is-servizzi HTTP u HTTPS fil-konfigurazzjoni tal-firewall biex tippermetti li t-talbiet mill-load balancer jgħaddu mill-firewall għas-servers tal-web Nginx. Imbagħad erġa' tagħbija s-servizz tal-firewalld biex taffettwa l-bidliet il-ġodda (agħmel dan fuq il-magni tal-klijenti kollha).

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

4. Sussegwentement, iftaħ web browser fuq il-magni lokali tiegħek u ttestja jekk l-installazzjoni ta 'Nginx tkunx qed taħdem sew. Uża l-IP tal-klijent biex tinnaviga, ladarba tara l-paġna tat-test Nginx, dan ifisser li s-server tal-web installat fuq il-magna tal-klijent qed jaħdem kif suppost.

5. Sussegwentement, irridu noħolqu paġni tat-test fuq il-magni tal-klijenti li se nużaw aktar tard biex nittestjaw is-setup 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

Pass 2: Installazzjoni u Konfigurazzjoni ta 'HAProxy Server fuq CentOS 8

6. Issa installa l-pakkett HAProxy fuq is-server HAProxy billi tħaddem il-kmand li ġej.

# dnf install haproxy

7. Sussegwentement, ibda s-servizz HAProxy, ppermettilu li jibda awtomatikament fil-boot tas-sistema u ivverifika l-istatus tiegħu.

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

8. Issa aħna se tikkonfigura l-HAProxy billi tuża l-fajl ta 'konfigurazzjoni li ġej.

# vi /etc/haproxy/haproxy.cfg

Il-fajl tal-konfigurazzjoni huwa maqsum f'erba 'taqsimiet ewlenin.

  • settings globali – jistabbilixxi parametri għall-proċess kollu.
  • defaults – din it-taqsima tistabbilixxi parametri default għat-taqsimiet l-oħra kollha wara d-dikjarazzjoni tagħha.
  • frontend – din it-taqsima tiddeskrivi sett ta’ sockets tas-smigħ li jaċċettaw konnessjonijiet tal-klijenti.
  • Backend - din it-taqsima tiddeskrivi sett ta' servers li magħhom il-proxy se jgħaqqad biex jgħaddi l-konnessjonijiet deħlin.

Biex tifhem l-għażliet taħt is-settings globali u l-inadempjenzi, aqra d-dokumentazzjoni HAProxy (link ipprovduta fl-aħħar tal-artiklu). Għal din il-gwida, se nużaw in-nuqqasijiet.

9. HAProxy meta skjerat se jkollu rwol sinifikanti fl-infrastruttura tal-IT tiegħek, u b'hekk il-konfigurazzjoni tal-illoggjar għaliha hija rekwiżit bażiku; dan jippermettilek tikseb għarfien dwar kull konnessjoni mas-servers tal-web backend tiegħek.

Il-parametru log (enfasizzat fil-screenshot li ġej) jiddikjara server Syslog globali (bħal rsyslog il-default f'CentOS) li se jirċievi messaġġi log. Aktar minn server wieħed jista' jiġi ddikjarat hawn.

Il-konfigurazzjoni default tipponta lejn il-localhost (127.0.0.1) u local2 huwa l-kodiċi tal-faċilità default użat biex jidentifika messaġġi log HAProxy taħt rsyslog.

10. Sussegwentement, trid tgħid lis-server rsyslog kif tirċievi u tipproċessa messaġġi log HAProxy. Iftaħ il-fajl tal-konfigurazzjoni rsyslog għal /etc/rsyslog.conf jew oħloq fajl ġdid fid-direttorju /etc/rsyslog.d, pereżempju /etc/rsyslog.d/haproxy.conf.

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

Ikkopja u waħħal il-konfigurazzjoni li ġejja biex tiġbor log ma 'UDP fuq il-port default 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Żid ukoll dawn il-linji biex tagħti struzzjonijiet lil rsyslog biex jikteb f'żewġ log files separati bbażati fuq is-severità, fejn local2 huwa l-kodiċi tal-faċilità definit fil-konfigurazzjoni HAProxy hawn fuq.

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

11. Issejvja l-fajl u agħlaqha. Imbagħad erġa ibda s-servizz rsyslog biex tapplika l-bidliet riċenti.

# systemctl restart rsyslog

12. F'din it-taqsima, se nuru kif tikkonfigura l-prokuri front-end u back-end. Mur lura għall-fajl ta 'konfigurazzjoni HAProxy u mmodifika s-sezzjonijiet default ta' front-end u backend kif ġej. Mhux se nidħlu fi spjegazzjoni dettaljata ta 'kull parametru, tista' dejjem tirreferi għad-dokumentazzjoni uffiċjali.

Il-konfigurazzjoni li ġejja tiddefinixxi taqsima ta 'smigħ użata biex isservi l-paġna ta' Stats HAProxy. Il-parametru bind jassenja semmiegħa għal indirizz IP partikolari (* għal kulħadd f'dan il-każ) u port (9000).

L-issettjar ta' stats enable jippermetti l-paġna tal-istatistika li se tiġi aċċessata bl-użu tal-URI /stats (jiġifieri http://server_ip:9000/stats).

L-issettjar tal-awtentikazzjoni tal-istatistiċi jintuża biex iżżid awtentikazzjoni bażika meta taċċessa l-paġna (issostitwixxi haproxy u [email  b'isem tal-utent u password tal-għażla tiegħek).

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

13. Il-konfigurazzjoni li jmiss tiddefinixxi sezzjoni ta 'frontend imsejħa TL (tista' tagħti isem li tixtieq). Il-parametru tal-modalità jiddefinixxi l-mod li fih jaħdem HAProxy.

Il-parametru acl (Lista ta' Kontroll tal-Aċċess) jintuża biex tieħu deċiżjoni bbażata fuq il-kontenut estratt mit-talba. F'dan l-eżempju, it-talba titqies bħala HTTP sempliċi jekk ma ssirx fuq SSL.

Imbagħad l-issettjar http-request set-header jintuża biex iżżid header HTTP mat-talba. Dan jgħin biex jinforma lil Nginx li t-talba inizjali saret fuq HTTP (jew permezz tal-port 80).

Id-direttiva default_backend jew use_backend tiddefinixxi s-servers backend, f'dan il-każ, referenzjati minn TL_web_servers.

Innota li HAProxy se jirritorna żball 503 Servizz Mhux Disponibbli jekk talba ma tiġix indirizzata minn direttiva use_backend jew 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. Imbagħad irridu niddefinixxu taqsima backend fejn l-issettjar tal-bilanċ jiddefinixxi kif HAProxy jagħżel is-servers back-end biex jipproċessaw talba jekk l-ebda metodu ta 'persistenza ma jegħleb dik l-għażla.

Id-direttiva tal-cookie tippermetti persistenza bbażata fuq cookie, tagħti struzzjonijiet lil HAProxy biex tibgħat cookie bl-isem SERVERID lill-klijent u jassoċjaha mal-ID tas-server li ta r-rispons inizjali.

Id-direttiva tas-server tintuża biex tiddefinixxi s-servers upstream fil-format isem_server (eż. websrv1), IP_server:port u għażliet.

Għażla ewlenija hija verifika li tgħid lil HAProxy biex tkompli tiċċekkja fuq id-disponibbiltà ta 'server u tirrapporta fuq il-paġna tal-istatistiċi.

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

Ikkummenta kwalunkwe sezzjoni oħra ta 'frontend u backend kif muri fil-screenshot li ġej. Issejvja l-fajl u agħlaqha.

15. Issa erġa ibda s-servizz HAProxy biex tapplika l-bidliet il-ġodda.

# systemctl restart haproxy

16. Sussegwentement, kun żgur li s-servizzi HTTP (port 80) u HTTPS (port 433) jinfetħu fil-firewall biex jaċċettaw it-talbiet tal-klijenti kif ġej. Ukoll, iftaħ il-port 9000 fil-firewall għall-aċċess għall-paġna tal-istatistiċi u erġa' tagħbija s-settings tal-firewall.

# 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

Pass 3: Ittestja s-Setup ta 'HAProxy u l-Istatistika tal-Wiri

17. Issa wasal iż-żmien li tittestja s-setup tal-HAPrxoy. Fuq il-magna tad-desktop lokali minn fejn qed taċċessa s-servers kollha, żid il-linja li ġejja fil-fajl /etc/hosts biex inkunu nistgħu nużaw id-dominju tas-sit finta.

10.42.0.247  www.tecmint.lan

18. Imbagħad iftaħ browser u naviga billi tuża jew l-indirizz tas-server jew id-dominju tas-sit.

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

19. Biex taċċessa l-paġna tal-istatistika HAProxy, uża l-indirizz li ġej.

http://10.42.0.247:9000/stats

Imbagħad uża l-isem tal-utent u l-password li ddefinijt fil-fajl tal-konfigurazzjoni HAProxy (irreferi għall-parametru tal-awtentikazzjoni tal-istatistiċi).

Wara login b'suċċess, int se tinżel fil-paġna tal-istatistika HAProxy li turik metriċi li jkopru s-saħħa tas-servers tiegħek, ir-rati attwali tat-talbiet, il-ħinijiet ta 'rispons, u ħafna aktar.

Biex nuru kif jaħdem ir-rapport tal-istatus fir-rigward tax-xogħol tal-kodiċijiet tal-kulur, poġġejna wieħed mis-servers back-end.

Pass 4: Konfigurazzjoni ta' HTTPS f'HAProxy Bl-użu ta' Ċertifikat SSL iffirmat waħdu

20. F'din it-taqsima finali, aħna se nuru kif tikkonfigura SSL/TLS biex niżguraw il-komunikazzjonijiet kollha bejn is-server HAProxy u l-klijent. HAProxy jappoġġja erba 'modi ta' konfigurazzjoni HTTPS ewlenin, iżda għal din il-gwida, se nużaw l-iskarikar SSL/TLS.

Fil-modalità ta 'slowload SSL/TLS, HAProxy jiddeċifra t-traffiku fuq in-naħa tal-klijent u jiġi konness fi traffiku ċar mas-servers backend.

Nibdew billi noħolqu ċ-ċertifikat u ċ-ċavetta kif muri (wieġeb il-mistoqsijiet kif xieraq ibbażati fuq id-dettalji tal-kumpanija tiegħek waqt il-ħolqien taċ-ċertifikat, kif enfasizzat fuq il-screenshot).

# 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. Sussegwentement, iftaħ il-fajl tal-konfigurazzjoni HAProxy (/etc/haproxy/haproxy.cfg) u editja t-taqsima ta 'quddiem.

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

Issejvja l-fajl u agħlaqha.

22. Imbagħad erġa ibda s-servizz HAProxy biex tapplika l-bidliet il-ġodda.

# systemctl restart haproxy.service

23. Sussegwentement, iftaħ web browser u pprova jaċċessa s-sit għal darb'oħra. Il-browser se juri żball minħabba ċ-ċertifikat iffirmat minnu nnifsu, ikklikkja Avvanzata biex tipproċedi.

Dak kollu għalissa! Kull applikazzjoni tal-web għandha s-sett ta 'rekwiżiti tagħha stess, għandek bżonn tfassal u tikkonfigura l-ibbilanċjar tat-tagħbija biex taqdi l-infrastruttura tal-IT tiegħek u r-rekwiżiti tal-applikazzjoni.

Biex tikseb aktar għarfien dwar xi wħud mill-għażliet ta 'konfigurazzjoni użati f'din il-gwida, u ġeneralment kif tuża HAProxy, ara d-dokumentazzjoni uffiċjali tal-verżjoni tal-intrapriża HAProxy. Tista' tpoġġi kwalunkwe mistoqsija jew ħsibijiet permezz tal-formola ta' feedback hawn taħt.