Wéi Setup HAProxy als Load Balancer fir Nginx op CentOS 8


Fir maximal Webapplikatioun Disponibilitéit, Skalierbarkeet an héich Leeschtung ze garantéieren, ass et elo heefeg Technologien ëmzesetzen déi Redundanz aféieren, sou wéi Serverclustering a Laaschtbalancéierung. Zum Beispill, e Cluster vu Serveren opzestellen déi all déiselwecht Applikatioun(en) lafen an dann Lastbalancer(en) virun hinnen ofsetzen fir de Traffic ze verdeelen.

HAProxy ass en Open-Source, mächteg, héich performant, zouverlässeg, sécher a wäit benotzt héich Disponibilitéit TCP/HTTP Lastbalancer, Proxy Server an SSL/TLS Terminator gebaut fir Websäiten mat ganz héije Traffic. Et leeft zouverlässeg gutt op Linux, Solaris, FreeBSD, OpenBSD souwéi AIX Betribssystemer.

Dëse Guide weist wéi een en engagéierten Héichverfügbarkeet Lastbalancer mat HAProxy op CentOS 8 opstellt fir de Traffic an engem Cluster vun NGINX Webserver ze kontrolléieren. Et weist och wéi Dir SSL/TLS Terminatioun an HAProxy konfiguréiert.

Insgesamt 4 Server mat minimaler CentOS 8 Installatioun.

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

Schrëtt 1: Nginx HTTP Server op de Client Maschinnen opsetzen

1. Login an all Är CentOS 8 Client Maschinnen an installéiert den Nginx Webserver mam dnf Package Manager wéi gewisen.

# dnf install Nginx

2. Als nächst fänkt den Nginx Service un, fir de Moment aktivéiert et automatesch beim Systemboot unzefänken a bestätegen datt et op a leeft andeems Dir säi Status iwwerpréift, mat de Systemctl Kommandoen (maacht dat op all Client Maschinnen).

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

3. Och, wann de Firewalld Service op all de Client Maschinnen leeft (déi Dir iwwerpréift andeems Dir systemctl start Firewalld leeft), musst Dir d'HTTP- an HTTPS-Servicer an der Firewall-Konfiguratioun addéieren fir Ufroe vum Lastbalancer duerch d'Firewall ze passéieren op den Nginx Webserver. Da lued de Firewalld-Service nei fir déi nei Ännerungen auszeféieren (maacht dëst op all Clientmaschinn).

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

4. Als nächst öffnen e Webbrowser op Äre lokalen Maschinnen a testen ob d'Nginx Installatioun gutt funktionnéiert. Benotzt d'Client IP's fir ze navigéieren, wann Dir d'Nginx Test Säit gesitt, heescht et datt de Webserver op der Clientmaschinn installéiert ass richteg funktionnéiert.

5. Als nächst musse mir Testsäiten op de Clientmaschinn erstellen, déi mir spéider benotze fir den HAProxy-Setup auszeprobéieren.

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

Schrëtt 2: Installéieren a konfiguréieren HAProxy Server op CentOS 8

6. Installéiert elo den HAProxy-Paket op den HAProxy-Server andeems Dir de folgende Kommando ausféiert.

# dnf install haproxy

7. Als nächst fänkt den HAProxy Service un, aktivéiert et fir automatesch beim Systemboot ze starten a säi Status z'iwwerpréiwen.

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

8. Elo konfiguréieren mir d'HAProxy mat der folgender Konfiguratiounsdatei.

# vi /etc/haproxy/haproxy.cfg

D'Konfiguratiounsdatei ass a véier Haaptsektiounen opgedeelt.

  • global Astellungen - setzt Prozesswäit Parameteren.
  • Defaults - dës Sektioun setzt Standardparameter fir all aner Sektiounen no senger Deklaratioun.
  • Frontend - dës Sektioun beschreift eng Rei vu lauschteren Sockets déi Clientverbindunge akzeptéieren.
  • Backend - dës Sektioun beschreift e Set vu Serveren, mat deenen de Proxy verbënnt fir opkommend Verbindunge weiderzekommen.

Fir d'Optiounen ënner globale Astellungen an Defaults ze verstoen, liest d'HAProxy Dokumentatioun (Link um Enn vum Artikel). Fir dëse Guide benotze mir d'Defaults.

9. HAProxy wann eemol ofgebaut wäert eng bedeitend Roll an Ärer IT Infrastruktur spillen, sou datt d'Konfiguratioun vum Logbuch fir et eng Basisfuerderung ass; dëst erlaabt Iech Abléck iwwer all Verbindung op Äre Backend Webserver ze kréien.

De Logparameter (markéiert am folgenden Screenshot) erklärt e globale Syslog-Server (wéi rsyslog de Standard an CentOS) dee Log-Messagen kritt. Méi wéi ee Server kann hei deklaréiert ginn.

D'Standardkonfiguratioun weist op de localhost (127.0.0.1) an local2 ass de Standardfaarfcode fir HAProxy Log Messagen ënner rsyslog z'identifizéieren.

10. Als nächst musst Dir dem rsyslog-Server soen wéi Dir HAProxy Log-Messagen kritt a veraarbecht. Öffnen d'rsyslog Konfiguratiounsdatei op /etc/rsyslog.conf oder erstellt eng nei Datei am /etc/rsyslog.d Verzeichnis, zum Beispill /etc/rsyslog.d/haproxy.conf.

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

Kopéiert a paste déi folgend Konfiguratioun fir de Log mat UDP um Standardport 514 ze sammelen.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Füügt och dës Zeilen un fir rsyslog z'instruéieren fir op zwou getrennte Logdateien op Basis vun der Gravitéit ze schreiwen, wou local2 den Facilitéitscode ass, deen an der HAProxy Konfiguratioun hei uewen definéiert ass.

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

11. D'Datei späicheren an zoumaachen. Da starten den rsyslog Service nei fir déi rezent Ännerungen anzesetzen.

# systemctl restart rsyslog

12. An dëser Rubrik wäerte mir demonstréieren wéi Dir d'Front-End- an Back-End Proxy konfiguréiert. Gitt zréck an d'HAProxy Konfiguratiounsdatei a ännert d'Default Front-End an Backend Sektiounen wéi follegt. Mir ginn net an eng detailléiert Erklärung vun all Parameter, Dir kënnt ëmmer op déi offiziell Dokumentatioun referenzéieren.

Déi folgend Konfiguratioun definéiert eng Nolauschtersektioun déi benotzt gëtt fir d'HAProxy Stats Säit ze déngen. De Bindparameter gëtt en Nolauschterer un eng bestëmmten IP Adress (* fir all an dësem Fall) an den Hafen (9000).

D'Statistik Enable-Astellung aktivéiert d'Statistik Säit déi mat der URI /stats zougeruff gëtt (dh http://server_ip:9000/stats).

D'Statistik Auth-Astellung gëtt benotzt fir eng Basis Authentifikatioun ze addéieren wann Dir op d'Säit kënnt (ersetzen Haproxy an [E-Mail geschützt] mat engem Benotzernumm a Passwuert vun Ärer Wiel).

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

13. Déi nächst Configuratioun definéiert e Frontend Sektioun genannt TL (Dir kënnt e Numm vun Ärem Wonsch ginn). De Modusparameter definéiert de Modus HAProxy funktionnéiert an.

Den acl (Access Control List) Parameter gëtt benotzt fir eng Entscheedung ze huelen baséiert op Inhalt extrahéiert aus der Ufro. An dësem Beispill gëtt d'Ufro als einfach HTTP ugesinn wann se net iwwer SSL gemaach gëtt.

Dann gëtt d'http-Request Set-Header Astellung benotzt fir en HTTP Header op d'Ufro ze addéieren. Dëst hëlleft Nginx z'informéieren datt déi initial Ufro iwwer HTTP gemaach gouf (oder iwwer Port 80).

D'default_backend oder use_backend Direktiv definéiert d'Backend Server, an dësem Fall, referenzéiert vun TL_web_servers.

Notéiert datt HAProxy e \503 Service Unavailable error\ zréckkënnt wann eng Ufro net vun enger use_backend oder default_backend Direktiv geréckelt gëtt.

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. Da musse mir e Backend Sektioun definéieren wou d'Gläichgewiicht Astellung definéiert wéi HAProxy d'Back-End-Server auswielt fir eng Ufro ze veraarbecht wann keng Persistenzmethod dës Auswiel iwwerschreift.

D'Cookie-Direktiv erméiglecht Cookie-baséiert Persistenz, et instruéiert HAProxy fir e Cookie mam Numm SERVERID un de Client ze schécken an et mat der ID vum Server ze associéieren deen déi initial Äntwert ginn huet.

D'Serverdirektiv gëtt benotzt fir d'Upstream Serveren am Format sever_name (zB websrv1), server_IP: port an Optiounen ze definéieren.

Eng Schlësseloptioun ass Kontrollen déi HAProxy seet weider op d'Disponibilitéit vun engem Server ze kontrolléieren an op der Statistik Säit ze berichten.

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

Kommentéiert all aner Frontend- a Backend-Sektiounen wéi am Screenshot deen folgend ass. Späichert d'Datei a maach se zou.

15. Elo restart den HAProxy Service fir déi nei Ännerungen anzesetzen.

# systemctl restart haproxy

16. Als nächst gitt sécher datt d'HTTP (Port 80) an HTTPS (Port 433) Servicer an der Firewall opgemaach ginn fir Client Ufroe wéi follegt ze akzeptéieren. Och öffnen den Hafen 9000 an der Firewall fir Zougang zu der Statistik Säit an lued d'Firewall-Astellungen nei.

# 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

Schrëtt 3: Testen HAProxy Setup a kucken Statistiken

17. Elo ass et Zäit fir den HAPrxoy Setup ze testen. Op der lokaler Desktop-Maschinn wou Dir op all Server zougitt, füügt déi folgend Zeil an der /etc/hosts-Datei fir eis z'erméiglechen den Dummy Site Domain ze benotzen.

10.42.0.247  www.tecmint.lan

18. Da öffnen e Browser a navigéiert entweder mat der Serveradress oder dem Site Domain.

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

19. Fir Zougang zu der HAProxy Statistik Säit, benotzt déi folgend Adress.

http://10.42.0.247:9000/stats

Benotzt dann de Benotzernumm a Passwuert, deen Dir an der HAProxy Konfiguratiounsdatei definéiert hutt (kuckt op de Statistiken auth Parameter).

No engem erfollegräiche Login wäert Dir op der HAProxy Statistik Säit landen, déi Iech Metriken weist déi d'Gesondheet vun Äre Serveren ofdecken, aktuell Ufroraten, Äntwertzäiten, a sou vill méi.

Fir ze demonstréieren wéi de Statusbericht iwwer d'Faarfcode funktionnéiert, hu mir ee vun de Back-End Server gesat.

Schrëtt 4: Konfiguréieren HTTPS an HAProxy Mat engem Self-signed SSL Certificate

20. An dëser leschter Sektioun wäerte mir weisen wéi Dir SSL/TLS konfiguréiert fir all Kommunikatiounen tëscht dem HAProxy Server a Client ze sécheren. HAProxy ënnerstëtzt véier grouss HTTPS Konfiguratiounsmodi, awer fir dëse Guide benotze mir SSL/TLS Offloading.

Am SSL/TLS Offloadmodus entschlësselt HAProxy de Traffic op der Clientssäit a gëtt a klore Traffic op de Backend Server verbonnen.

Mir fänken un mam Zertifikat a Schlëssel ze kreéieren wéi gewisen (Äntwert d'Froen deementspriechend baséiert op Äre Firmendetailer wärend der Zertifikatschafung, wéi um Screenshot markéiert).

# 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. Als nächst, öffnen d'HAProxy Konfiguratiounsdatei (/etc/haproxy/haproxy.cfg) an ännert d'Front-End-Sektioun.

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

Späichert d'Datei a maach se zou.

22. Da starten den HAProxy Service nei fir déi nei Ännerungen anzesetzen.

# systemctl restart haproxy.service

23. Als nächst, öffnen e Webbrowser a probéiert nach eng Kéier op de Site ze kommen. De Browser weist e Feeler wéinst dem selbst ënnerschriwwenen Zertifika, klickt Fortgeschratt fir weiderzegoen.

Dat ass alles fir elo! All Webapplikatioun huet säin eegene Set vun Ufuerderungen, Dir musst Laaschtbalancéierung designen an konfiguréieren fir Är IT Infrastruktur an Ufuerderunge vun der Applikatioun ze passen.

Fir méi Abléck iwwer e puer vun de Konfiguratiounsoptiounen ze kréien, déi an dësem Guide benotzt ginn, an allgemeng wéi Dir HAProxy benotzt, kuckt déi offiziell HAProxy Enterprise Versioun Dokumentatioun. Dir kënnt all Froen oder Gedanken iwwer de Feedbackformular hei drënner posten.