Zoeken op website

Hoe HAProxy in te stellen als Load Balancer voor Nginx op CentOS 8


Om maximale beschikbaarheid, schaalbaarheid en hoge prestaties van webapplicaties te garanderen, is het nu gebruikelijk om technologieën te implementeren die redundantie introduceren, zoals serverclustering en taakverdeling. Bijvoorbeeld door een cluster van servers op te zetten die allemaal dezelfde applicatie(s) draaien en daar vervolgens load balancer(s) voor te plaatsen om het verkeer te verdelen.

HAProxy is een open-source, krachtige, krachtige, betrouwbare, veilige en veelgebruikte TCP/HTTP load balancer, proxyserver en SSL/TLS-terminator met hoge beschikbaarheid, gebouwd voor websites met zeer veel verkeer. Het werkt betrouwbaar goed op Linux, Solaris, FreeBSD, OpenBSD en ook op AIX-besturingssystemen.

Deze handleiding laat zien hoe u een speciale load balancer met hoge beschikbaarheid instelt met HAProxy op CentOS 8 om het verkeer in een cluster van NGINX webservers te controleren. Het laat ook zien hoe u SSL/TLS-beëindiging in HAProxy configureert.

Vereisten:

In totaal 4 servers met minimale CentOS 8-installatie.

Testomgeving instellen

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

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 ervan te controleren met behulp van systemctl opdrachten (doe dit op alle clientmachines).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Als de firewalld-service op alle clientmachines draait (wat u kunt controleren door systemctl start firewalld uit te voeren), moet u de HTTP en toevoegen HTTPS-services in de firewallconfiguratie om verzoeken van de load balancer door de firewall naar de Nginx-webservers te laten gaan. Laad vervolgens de firewalld-service opnieuw om de nieuwe wijzigingen door te voeren (doe dit op alle clientcomputers).

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 client-IP's om te navigeren. Zodra u de Nginx-testpagina ziet, betekent dit dat de webserver die op de clientcomputer is geïnstalleerd, correct werkt.

5. Vervolgens moeten we testpagina's maken op de clientmachines die we later zullen gebruiken om de HAProxy-installatie uit 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 de volgende opdracht uit te voeren.

dnf install haproxy

7. Start vervolgens de HAProxy service, schakel deze in om automatisch te starten bij het opstarten van het systeem en verifieer de status ervan.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Nu gaan we de HAProxy configureren met behulp van het volgende configuratiebestand.

vi /etc/haproxy/haproxy.cfg

Het configuratiebestand is verdeeld in vier hoofdsecties.

  • algemene instellingen – stelt procesbrede parameters in.
  • standaardinstellingen – deze sectie stelt standaardparameters in voor alle andere secties na de declaratie ervan.
  • frontend – deze sectie beschrijft een reeks luistersockets die clientverbindingen accepteren.
  • Backend – deze sectie beschrijft een reeks servers waarmee de proxy verbinding zal maken om inkomende verbindingen door te sturen.

Om de opties onder algemene instellingen en standaardinstellingen te begrijpen, leest u de HAProxy-documentatie (link aan het einde van het artikel). Voor deze handleiding gebruiken we de standaardinstellingen.

HAProxy-logboekregistratie instellen

9. HAProxy zal, wanneer het eenmaal is geïmplementeerd, een belangrijke rol spelen in uw IT-infrastructuur, dus het configureren van logboekregistratie hiervoor is een basisvereiste; Hierdoor krijgt u inzicht in elke verbinding met uw backend-webservers.

De log parameter (gemarkeerd in de volgende schermafbeelding) geeft een globale Syslog server aan (zoals rsyslog als standaard in CentOS) die logberichten zal ontvangen. Hier kunnen meer dan één server worden gedeclareerd.

De standaardconfiguratie verwijst naar de localhost (127.0.0.1) en local2 is de standaardfaciliteitscode die wordt gebruikt om HAProxy-logberichten onder te identificeren rsyslog.

10. Vervolgens moet u de rsyslog-server vertellen hoe HAProxy logberichten moeten worden ontvangen en verwerkt. Open het rsyslog-configuratiebestand naar /etc/rsyslog.conf of maak een nieuw bestand in de map /etc/rsyslog.d, bijvoorbeeld /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Kopieer en plak de volgende configuratie om logbestanden te verzamelen met UDP op de standaardpoort 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Voeg deze regels ook toe om rsyslog te instrueren om naar twee afzonderlijke logbestanden te schrijven op basis van de ernst, waarbij local2 de faciliteitscode is die 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

HAProxy front-end en back-ends configureren

12. In dit gedeelte laten we zien hoe u de front-end- en back-end-proxy's configureert. Ga terug naar het HAProxy configuratiebestand en wijzig de standaard front-end- en backend-secties als volgt. We zullen niet ingaan op een gedetailleerde uitleg van elke parameter, u kunt altijd de officiële documentatie raadplegen.

De volgende configuratie definieert een luister-sectie die wordt gebruikt om de pagina HAProxy Stats weer te geven. De parameter bind wijst een luisteraar toe aan een bepaald IP-adres (* in dit geval voor iedereen) en poort (9000 >).

Met de instelling enable voor statistieken wordt de statistiekenpagina ingeschakeld die toegankelijk is via de URI /stats (d.w.z. http://server_ip:9000/stats) .

De auth-instelling voor statistieken wordt gebruikt om een basisauthenticatie toe te voegen bij toegang tot de pagina (vervang haproxy en Lostp@1ss door een gebruikersnaam en wachtwoord van uw 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 frontend-sectie met de naam TL (u kunt een naam naar wens opgeven). De parameter mode definieert de modus waarin HAProxy werkt.

De parameter acl (Access Control List) wordt gebruikt om een beslissing te nemen op basis van de inhoud die uit het verzoek wordt gehaald. In dit voorbeeld wordt het verzoek als gewoon HTTP beschouwd als het niet via SSL is ingediend.

Vervolgens wordt de instelling http-request set-header gebruikt om een HTTP-header aan het verzoek toe te voegen. Dit helpt Nginx te informeren dat het initiële verzoek is gedaan via HTTP (of via poort 80).

De default_backend of use_backend richtlijn definieert de backend-servers, in dit geval waarnaar wordt verwezen door TL_web_servers.

Houd er rekening mee dat HAProxy een “503 Service Unavailable error” retourneert als een verzoek niet wordt gerouteerd door een use_backend of default_backend > richtlijn.

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. Vervolgens moeten we een backend-sectie definiëren waarin de balans-instelling definieert hoe HAProxy de back-endservers selecteert om een verzoek te verwerken als dat niet het geval is. persistentiemethode overschrijft die selectie.

De cookie richtlijn maakt op cookies gebaseerde persistentie mogelijk, het instrueert HAProxy om een cookie met de naam SERVERID naar de client te sturen en om het te koppelen aan de ID van de server die het eerste antwoord gaf.

De server richtlijn wordt gebruikt om de upstream-servers te definiëren in het formaat sever_name (bijvoorbeeld websrv1), server_IP:port en opties.

Een belangrijke optie is check, waarmee HAProxy wordt opgedragen de beschikbaarheid van een server te blijven controleren en op de statistiekenpagina te rapporteren.

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

Geef commentaar op eventuele andere frontend- en backend-secties, zoals weergegeven in de onderstaande schermafbeelding. Sla het bestand op en sluit het.

15. Start nu de HAProxy-service opnieuw 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 worden als volgt in de firewall geopend om clientverzoeken te accepteren. Open ook poort 9000 in de firewall voor toegang tot de statistiekenpagina en laad de firewall-instellingen opnieuw.

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-installatie testen en statistieken bekijken

17. Nu is het tijd om de HAPrxoy-installatie te testen. Op de lokale desktopcomputer waarvandaan u toegang heeft tot alle servers, voegt u de volgende regel toe aan het bestand /etc/hosts, zodat we het dummy-sitedomein kunnen gebruiken.

10.42.0.247  www.tecmint.lan

18. Open vervolgens een browser en navigeer met behulp van het serveradres of het sitedomein.

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

19. Gebruik het volgende adres om toegang te krijgen tot de HAProxy-statistiekenpagina.

http://10.42.0.247:9000/stats

Gebruik vervolgens de gebruikersnaam en het wachtwoord die u hebt gedefinieerd in het HAProxy-configuratiebestand (zie de stats auth-parameter).

Na een succesvolle aanmelding komt u op de HAProxy-statistiekenpagina terecht, waar u statistieken ziet over de gezondheid van uw servers, de huidige verzoekpercentages, responstijden en nog veel meer.

Om te demonstreren hoe het statusrapport werkt met betrekking tot de kleurcodes, hebben we een van de back-end servers geplaatst.

Stap 4: HTTPS configureren in HAProxy met behulp van een zelfondertekend SSL-certificaat

20. In dit laatste gedeelte laten we zien hoe u 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 gebruiken we SSL/TLS-offloading.

In de SSL/TLS offloading-modus ontcijfert HAProxy het verkeer aan de clientzijde en wordt in duidelijk verkeer verbonden met de backend-servers.

We beginnen met het maken van het certificaat en de sleutel zoals weergegeven (beantwoord de vragen dienovereenkomstig op basis van uw bedrijfsgegevens tijdens het maken van het certificaat, zoals gemarkeerd 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. Open vervolgens het HAProxy-configuratiebestand (/etc/haproxy/haproxy.cfg) en bewerk de front-endsectie.

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. Start vervolgens de HAProxy-service opnieuw om de nieuwe wijzigingen toe te passen.

systemctl restart haproxy.service

23. Open vervolgens een webbrowser en probeer nogmaals toegang te krijgen tot de site. De browser geeft een foutmelding vanwege het zelfondertekende certificaat. Klik op Geavanceerd om door te gaan.

Dat is het voor nu! Elke webapplicatie heeft zijn eigen eisen. U moet de load-balancing ontwerpen en configureren zodat deze past bij de vereisten van uw IT-infrastructuur en applicatie.

Voor meer inzicht in enkele van de configuratieopties die in deze handleiding worden gebruikt, en in het algemeen over het gebruik van HAProxy, raadpleegt u de officiële documentatie van de HAProxy-communityeditie of de documentatie van de HAProxy-ondernemingsversie. Via het onderstaande feedbackformulier kunt u uw vragen of opmerkingen posten.