Om maximale beschikbaarheid, schaalbaarheid en hoge prestaties van webapplicaties te garanderen, is het tegenwoordig gebruikelijk om technologieën te implementeren die redundantie introduceren, zoals serverclustering en load balancing. Bijvoorbeeld door een cluster van servers op te zetten die allemaal dezelfde applicatie(s) uitvoeren en vervolgens load balancers ervoor te implementeren om het verkeer te verdelen.
HAProxy is een open-source, krachtige, zeer prestatiegerichte, betrouwbare, veilige en veelgebruikte load balancer, proxyserver en SSL/TLS-terminator voor zeer drukke websites. Het draait betrouwbaar op Linux, Solaris, FreeBSD, OpenBSD, evenals AIX-besturingssystemen.
Deze handleiding laat zien hoe je een toegewijde load balancer met hoge beschikbaarheid opzet met HAProxy op CentOS 8 om het verkeer in een cluster van NGINX webservers te regelen. Het toont ook hoe je SSL/TLS-terminatie configureert in HAProxy.
Vereisten:
A total of 4 servers with minimal CentOS 8 installation.
Opzetten van testomgeving
----------- 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
Stap 1: Nginx HTTP-server instellen op de clientmachines
1.Log in op al uw CentOS 8 clientmachines en installeer de Nginx webserver met behulp van de dnf-pakketbeheerder zoals getoond.
# dnf install Nginx
2. Start vervolgens de Nginx-service, schakel deze voorlopig in om automatisch te starten bij het opstarten van het systeem en bevestig dat deze actief is door de status te controleren met behulp van de systemctl-commando’s (doe dit op alle clientmachines).
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
3. Als de firewalld-service op alle clientmachines actief is (wat u kunt controleren door systemctl start firewalld uit te voeren), moet u de HTTP– en HTTPS-services toevoegen in de firewall-configuratie om verzoeken van de load balancer door te laten naar de Nginx-webservers. Herlaad vervolgens de firewalld-service om de nieuwe wijzigingen door te voeren (doe dit op alle clientmachines).
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
4. Open vervolgens een webbrowser op uw lokale machines en test of de Nginx-installatie goed werkt. Gebruik de IP-adressen van de client om te navigeren, zodra u de testpagina van Nginx ziet, betekent dit dat de webserver correct is geïnstalleerd op de clientmachine.

5. Vervolgens moeten we testpagina’s maken op de clientmachines die we later zullen gebruiken om de HAProxy-configuratie te testen.
----------- 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
Stap 2: HAProxy-server installeren en configureren op CentOS 8
6. Installeer nu het HAProxy-pakket op de HAProxy-server door het volgende commando uit te voeren.
# dnf install haproxy
7. Start vervolgens de HAProxy-service, schakel in om automatisch op te starten bij het opstarten van het systeem en controleer de status.
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy

8. Nu gaan we HAProxy configureren met behulp van het volgende configuratiebestand.
# vi /etc/haproxy/haproxy.cfg
Het configuratiebestand is verdeeld in vier belangrijke secties.
- globale instellingen – stelt procesbrede parameters in.
- standaardwaarden – deze sectie stelt standaardparameters in voor alle andere secties na de verklaring ervan.
- frontend – deze sectie beschrijft een reeks luisterende sockets die clientverbindingen accepteren.
- Achterkant – deze sectie beschrijft een reeks servers waarmee de proxy verbinding zal maken om inkomende verbindingen door te sturen.
Om de opties onder globale instellingen en standaardwaarden te begrijpen, lees de HAProxy-documentatie (link aan het einde van het artikel). Voor deze handleiding zullen we de standaardwaarden gebruiken.
Configuratie van HAProxy-logboekregistratie
9. Eenmaal geïmplementeerd, speelt HAProxy een belangrijke rol in uw IT-infrastructuur, dus het configureren van logging is een basisvereiste; hiermee kunt u inzicht krijgen in elke verbinding met uw backend-webservers.
De log parameter (gemarkeerd in de volgende schermafbeelding) declareert een wereldwijde Syslog server (zoals rsyslog, de standaard in CentOS) die logboekberichten zal ontvangen. Hier kan meer dan één server worden gedeclareerd.
De standaardconfiguratie wijst naar de localhost (127.0.0.1) en local2 is de standaard faciliteitscode die wordt gebruikt om HAProxy logboekberichten te identificeren onder rsyslog.

10. Vervolgens moet je de rsyslog server vertellen hoe hij HAProxy logboekberichten moet ontvangen en verwerken. Open het rsyslog configuratiebestand naar /etc/rsyslog.conf of maak een nieuw bestand aan binnen de /etc/rsyslog.d directory, bijvoorbeeld /etc/rsyslog.d/haproxy.conf.
# vi /etc/rsyslog.d/haproxy.conf
Kopieer en plak de volgende configuratie om logboeken te verzamelen met UDP op de standaardpoort 514.
$ModLoad imudp $UDPServerAddress 127.0.0.1 $UDPServerRun 514
Voeg ook deze regels toe om rsyslog te instrueren om naar twee afzonderlijke logbestanden te schrijven op basis van de ernst, waar local2 de faciliteitscode is gedefinieerd in de HAProxy-configuratie hierboven.
local2.* /var/log/haproxy-traffic.log local2.notice /var/log/haproxy-admin.log
11. Sla het bestand op en sluit het. Start vervolgens de rsyslog service opnieuw op om de recente wijzigingen toe te passen.
# systemctl restart rsyslog
Configuratie van HAProxy Front-end en Back-ends
12. In deze sectie zullen we demonstreren hoe de front-end en back-end proxies geconfigureerd kunnen worden. Ga terug naar het HAProxy configuratiebestand en pas de standaard front-end en backend secties aan zoals hieronder. We zullen niet ingaan op een gedetailleerde uitleg van elke parameter, je kunt altijd de officiële documentatie raadplegen.
De volgende configuratie definieert een listen sectie die wordt gebruikt om de HAProxy Stats pagina te serveren. De bind parameter koppelt een luisteraar aan een opgegeven IP-adres (*
in dit geval voor alle) en poort (9000).
De stats enable instelling activeert de statistiekenpagina die benaderd zal worden met behulp van de URI /stats (d.w.z. http://server_ip:9000/stats
).
De stats auth instelling wordt gebruikt om basisverificatie toe te voegen bij het benaderen van de pagina (vervang haproxy en Lostp@1ss door een gebruikersnaam en wachtwoord naar keuze).
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:Lostp@1ss
13. De volgende configuratie definieert een front-end sectie genaamd TL (je kunt een naam naar keuze geven). De mode parameter definieert de modus waarin HAProxy opereert.
De acl (Toegangscontrolelijst) parameter wordt gebruikt om een beslissing te nemen op basis van inhoud die uit het verzoek is gehaald. In dit voorbeeld wordt het verzoek als gewone HTTP beschouwd als het niet over SSL is gemaakt.
Vervolgens wordt de instelling http-request set-header gebruikt om een HTTP-header aan het verzoek toe te voegen. Dit helpt om Nginx te informeren dat het initiële verzoek over HTTP is gemaakt (of via poort 80).
De richtlijn default_backend of use_backend definieert de backend-servers, in dit geval verwezen door TL_web_servers.
Let op dat HAProxy een “503 Service Unavailable error” zal teruggeven als een verzoek niet door een use_backend of default_backend richtlijn wordt gerouteerd.
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. Dan moeten we een backend-sectie definiëren waar de instelling balance bepaalt hoe HAProxy de back-end servers selecteert om een verzoek te verwerken als geen persistentiemethode die selectie overschrijft.
De richtlijn cookie maakt cookie-gebaseerde persistentie mogelijk, het instrueert HAProxy om een cookie genaamd SERVERID naar de cliënt te sturen en te associëren met de ID van de server die de initiële respons gaf.
De server richtlijn wordt gebruikt om de upstream servers te definiëren in het formaat server_naam (bijv websrv1), server_IP:poort en opties.
Een belangrijke optie is check die HAProxy vertelt om de beschikbaarheid van een server te blijven controleren en hierover te rapporteren op de statistiekenpagina.
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
Commentarieer eventuele andere frontend en backend secties uit zoals getoond in de screenshot die volgt. Sla het bestand op en sluit het.

15. Start nu de HAProxy service opnieuw op om de nieuwe wijzigingen toe te passen.
# systemctl restart haproxy
16. Zorg er vervolgens voor dat de HTTP (poort 80) en HTTPS (poort 433) services geopend zijn in de firewall om clientverzoeken te accepteren zoals hieronder weergegeven. Open ook poort 9000 in de firewall om toegang te krijgen tot de statistiekenpagina en herlaad de firewallinstellingen.
# 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
Stap 3: HAProxy-setup testen en statistieken bekijken
17. Het is nu tijd om de HAPrxoy setup te testen. Voeg op de lokale desktopmachine waarvandaan je alle servers benadert, de volgende regel toe in het bestand /etc/hosts om ons in staat te stellen het dummy domein van de site te gebruiken.
10.42.0.247 www.tecmint.lan
18. Open vervolgens een browser en navigeer met behulp van het serveradres of de domeinnaam van de site.
http://10.42.0.247/ OR http://www.tecmint.lan/

19. Om toegang te krijgen tot de HAProxy statistiekenpagina, gebruik het volgende adres.
http://10.42.0.247:9000/stats
Gebruik vervolgens de gebruikersnaam en het wachtwoord dat je hebt gedefinieerd in het HAProxy-configuratiebestand (zie de stats auth parameter).

Na een succesvolle login, kom je terecht op de statistiekenpagina van HAProxy die je gegevens laat zien die de gezondheid van je servers, huidige verzoektarieven, responstijden, en nog veel meer omvatten.
Om te demonstreren hoe het statusrapport werkt met betrekking tot de kleurcodes, hebben we een van de back-end servers geplaatst.

Stap 4: Het configureren van HTTPS in HAProxy met behulp van een zelfondertekend SSL-certificaat
20. In dit laatste gedeelte zullen we demonstreren hoe je SSL/TLS configureert om alle communicatie tussen de HAProxy-server en de client te beveiligen. HAProxy ondersteunt vier belangrijke HTTPS configuratiemodi, maar voor deze handleiding zullen we SSL/TLS offloading gebruiken.
In SSL/TLS offloading modus, ontcijfert HAProxy het verkeer aan de kant van de client en maakt verbinding met de back-end servers in helder verkeer.
We zullen beginnen met het maken van het certificaat en de sleutel zoals getoond (beantwoord de vragen dienovereenkomstig op basis van de bedrijfsgegevens tijdens het maken van het certificaat, zoals aangegeven op de schermafbeelding).
# 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. Vervolgens, open het configuratiebestand van HAProxy (/etc/haproxy/haproxy.cfg) en bewerk het front-end gedeelte.
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

Sla het bestand op en sluit het.
22. Herstart dan de HAProxy-service om de nieuwe wijzigingen toe te passen.
# systemctl restart haproxy.service
23. Open vervolgens een webbrowser en probeer de site opnieuw te openen. De browser zal een foutmelding tonen vanwege het zelfondertekende certificaat, klik op Geavanceerd om door te gaan.



Dat is alles voor nu! Elke webapplicatie heeft zijn eigen set vereisten, je moet load balancing ontwerpen en configureren om aan te sluiten bij je IT-infrastructuur en de vereisten van de applicatie.
Om meer inzicht te krijgen in enkele van de configuratieopties die in deze handleiding worden gebruikt, en over het algemeen hoe je HAProxy kunt gebruiken, zie de officiële HAProxy community-editie documentatie of de HAProxy enterprise versie documentatie. Je kunt eventuele vragen of gedachten posten via het feedbackformulier hieronder.
Source:
https://www.tecmint.com/setup-nginx-haproxy-load-balancer-in-centos-8/