De vertaling van het artikel is voorbereid ter voorbereiding op de start van de cursus

Load balancing is een veelgebruikte oplossing voor horizontale schaalvergroting van webtoepassingen over verschillende hosts, waarbij gebruikers een enkele toegangspunt tot de service krijgen. is een van de populairste open source load balancing programma's, dat ook hoge beschikbaarheid en proxyfunctionaliteit biedt.
HAProxy is gericht op het optimaliseren van het gebruik van middelen, het maximaliseren van de doorvoer, het minimaliseren van de responstijd en het voorkomen van overbelasting van elk afzonderlijk middel. Het kan op vele Linux-distributies worden geïnstalleerd, zoals CentOS 8, waarop we ons in deze handleiding zullen richten, evenals op systemen en .

HAProxy is bijzonder geschikt voor websites met zeer hoog verkeer en wordt daarom vaak gebruikt om de betrouwbaarheid en prestaties van webserviceconfiguraties met meerdere servers te verbeteren. In deze handleiding worden de stappen beschreven om HAProxy als load balancer in te stellen op een cloudhost CentOS 8, die vervolgens het verkeer naar je webservers leidt.
Als vereiste voor het behalen van de beste resultaten moet je minstens twee webservers en een load balancer-server hebben. Op de webservers moet ten minste een basale webservice draaien, zoals nginx of httpd, zodat de load balancing tussen hen kan worden getest.
HAProxy installeren op CentOS 8
Aangezien HAProxy een snel groeiende open source applicatie is, kan de distributie die beschikbaar is in de standaard repositories van CentOS niet de laatste versie zijn. Om de actuele versie te achterhalen, voer je de volgende opdracht uit:
sudo yum info haproxyHAProxy biedt altijd drie stabiele versies om uit te kiezen: de twee meest recente ondersteunde versies en een derde, oudere versie die nog steeds kritische updates ontvangt. Je kunt altijd de laatste stabiele versie vinden op de HAProxy-website en vervolgens beslissen met welke versie je wilt werken.
In deze handleiding zullen we de nieuwste stabiele versie 2.0 installeren, die nog niet beschikbaar was in de standaard repositories ten tijde van het schrijven van deze handleiding. U moet deze vanuit de bron installeren. Maar controleer eerst of u aan de vereiste voorwaarden voldoet om het programma te kunnen downloaden en compileren.
sudo yum install gcc pcre-devel tar make -yDownload de broncode met de onderstaande commandoregel. U kunt controleren of er een nieuwere versie beschikbaar is op .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzNa het downloaden, pak de bestanden uit met de onderstaande opdracht:
tar xzvf ~/haproxy.tar.gz -C ~/Ga naar de uitgepakte map met de bronbestanden:
cd ~/haproxy-2.0.7Compileer vervolgens het programma voor uw systeem:
make TARGET=linux-glibcEn tenslotte, installeer HAProxy:
sudo make installNu is HAProxy geïnstalleerd, maar er zijn enkele aanvullende handelingen vereist voor het goed functioneren. Laten we verder gaan met de configuratie van de software en de services hieronder.
HAProxy configureren voor uw server
Voeg nu de volgende mappen en het statistiekbestand toe voor de HAProxy register:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/statsMaak een symbolische link voor de binaire bestanden, zodat u HAProxy-commando's als gewone gebruiker kunt uitvoeren:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxyAls u een proxyserver als een service aan het systeem wilt toevoegen, kopieer dan het bestand haproxy.init uit voorbeelden naar uw map /etc/init.d. Bewerk de bestandspermissies zodat het script uitvoerbaar is en herlaad vervolgens de systemd-daemon:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reloadU moet ook de service toestemming geven om automatisch te herstarten bij het opstarten van het systeem:
sudo chkconfig haproxy onVoor uw gemak wordt het ook aangeraden om een nieuwe gebruiker toe te voegen om HAProxy uit te voeren:
sudo useradd -r haproxyDaarna kunt u het versienummer van de geïnstalleerde versie opnieuw controleren met de volgende opdracht:
haproxy -v
HA-Proxy versie 2.0.7 2019/09/27 - https://haproxy.org/In ons geval zou de versie 2.0.7 moeten zijn, zoals weergegeven in het bovenstaande uitvoervoorbeeld.
Tot slot is de firewall in CentOS 8 standaard behoorlijk restrictief voor dit project. Gebruik de volgende commando's om de nodige diensten toe te staan en herstart de firewall:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reloadInstellen van de load balancer
Het configureren van HAProxy is een vrij eenvoudig proces. In wezen moet u HAProxy alleen vertellen welke verbindingen het moet afluisteren en waar deze moeten worden doorgestuurd.
Dit gebeurt door een configuratiebestand aan te maken in /etc/haproxy/haproxy.cfg met de relevante instellingen. U kunt meer lezen over de configuratie-opties van HAProxy , als u daar meer over wilt weten.
Load balancing op transportniveau (laag 4)
Laten we beginnen met een basisconfiguratie. Maak een nieuw configuratiebestand aan, bijvoorbeeld met vi met de onderstaande opdracht:
sudo vi /etc/haproxy/haproxy.cfgVoeg de volgende secties toe aan het bestand. Vervang server_name door de namen die uw servers op de statistiekpagina moeten weergeven, en private_ip door de privé-IP-adressen van de servers waar u het webverkeer naartoe wilt sturen. U kunt de privé-IP-adressen controleren en op het tabblad Privé netwerk in het menu Netwerk global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats timeout 30s user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server server_name1 private_ip1:80 check server server_name2 private_ip2:80 check.
Dit bepaalt de load balancer op transportniveau (laag 4) met de externe naam http_front, die poort 80 afluistert en vervolgens verkeer naar de standaard backend met de naam http_back leidt. Extra statistieken /haproxy?stats verbinden met de statistiekpagina op het opgegeven adres.Verschillende load balancing-algoritmes.
Het opgeven van servers in de backend-sectie stelt HAProxy in staat deze servers te gebruiken voor load balancing volgens het round-robin-algoritme, waar mogelijk.
Load balancing-algoritmes worden gebruikt om te bepalen naar welke server in de backend elke verbinding wordt verzonden. Hier zijn enkele nuttige opties:
Roundrobin:
- elke server wordt om beurten gebruikt op basis van zijn gewicht. Dit is het soepelste en eerlijkste algoritme, waarbij de verwerkingstijd over de servers gelijkmatig wordt verdeeld. Dit algoritme is dynamisch en maakt het mogelijk om het gewicht van de server on-the-fly aan te passen. Leastconn:
- Weinig Verbinding: Er wordt een server geselecteerd met het minste aantal verbindingen. Er wordt een cyclische doorloop uitgevoerd tussen servers met dezelfde belasting. Het gebruik van dit algoritme wordt aanbevolen voor lange sessies zoals LDAP, SQL, TSE, enz., maar het is niet geschikt voor korte sessies zoals HTTP.
- Eerste: De eerste server met beschikbare verbindingsslots krijgt de verbinding. Servers worden geselecteerd van het laagste numerieke identificatienummer naar het hoogste, wat standaard overeenkomt met de positie van de server in de farm. Zodra de server de waarde maxconn bereikt, wordt de volgende server gebruikt.
- Bron: Het IP-adres van de bron wordt gehasht en gedeeld door het totale gewicht van de actieve servers om te bepalen welke server het verzoek ontvangt. Op deze manier zal hetzelfde IP-adres van de cliënt altijd naar dezelfde server worden gestuurd, terwijl de servers constant blijven.
Configuratie van load balancing op toepassingsniveau (laag 7)
Een andere beschikbare optie is om de load balancer in te stellen voor werking op toepassingsniveau (laag 7), wat nuttig is wanneer delen van uw webapplicatie zich op verschillende hosts bevinden. Dit kan worden bereikt door de verbindingsoverdracht te regelen, bijvoorbeeld op basis van de URL.
Open het configuratiebestand van HAProxy met een teksteditor:
sudo vi /etc/haproxy/haproxy.cfgStel vervolgens de front-end en back-end segmenten in volgens het onderstaande voorbeeld:
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 checkDe front-end verklaart een ACL-regel met de naam url_blog, die van toepassing is op alle verbindingen met paden die beginnen met /blog. Use_backend bepaalt dat verbindingen die voldoen aan de voorwaarde url_blog, moeten worden bediend door de back-end met de naam blog_back, terwijl alle andere verzoeken worden verwerkt door de standaard back-end.
Aan de achterkant stelt de configuratie twee groepen servers in: http_back, zoals voorheen, en een nieuwe, genaamd blog_back, die verbindingen bedient met example.com/blog.
Na het wijzigen van de instellingen, slaat u het bestand op en start u HAProxy opnieuw met de volgende opdracht:
sudo systemctl restart haproxyAls u bij het opstarten waarschuwingen of foutmeldingen heeft gekregen, controleer dan de configuratie op deze meldingen en zorg ervoor dat u alle benodigde bestanden en mappen heeft aangemaakt, en probeer vervolgens opnieuw op te starten.
Configuratietests
Wanneer HAProxy is ingesteld en draait, opent u het publieke IP-adres van de load balancer in uw browser en controleert u of u correct bent verbonden met de backend. Parameter stats uri in de configuratie maakt een statistiekpagina op het opgegeven adres aan.
http://load_balancer_public_ip/haproxy?statsAls u de statistiekpagina laadt en al uw servers groen worden weergegeven, is de configuratie succesvol geweest!

De statistiekpagina bevat nuttige informatie voor het volgen van uw webhosts, waaronder uptime/downtime en het aantal sessies. Als de server rood is gemarkeerd, zorg er dan voor dat de server aanstaat en dat u deze kunt pingen vanaf de load balancermachine.
Als uw load balancer niet reageert, zorg er dan voor dat HTTP-verbindingen niet door de firewall worden geblokkeerd. Controleer ook of HAProxy functioneert met het volgende commando:
sudo systemctl status haproxyBeveiliging van de statistiekpagina met een wachtwoord
Echter, als de statistiekpagina gewoon in de frontend is aangegeven, is deze openbaar toegankelijk, wat misschien niet zo’n goed idee is. In plaats daarvan kunt u een eigen poortnummer toewijzen door het onderstaande voorbeeld aan het einde van uw haproxy.cfg-bestand toe te voegen. Vervang username en password door iets veili gs:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:passwordVerwijder na het toevoegen van de nieuwe luistergroep de oude verwijzing naar stats uri uit de frontendgroep. Sla het bestand op en start HAProxy opnieuw op.
sudo systemctl restart haproxyOpen vervolgens opnieuw de load balancer met het nieuwe poortnummer en log in met de gebruikersnaam en het wachtwoord die u in het configuratiebestand heeft opgegeven.
http://load_balancer_public_ip:8181Zorg ervoor dat al uw servers nog steeds groen worden weergegeven, en open vervolgens alleen het IP van de load balancer zonder poortnummers in uw browser.
http://load_balancer_public_ip/Als uw interne servers enige variëteit aan bestemmingspagina's hebben, zult u merken dat elke keer als u de pagina vernieuwt, u een antwoord van een andere host krijgt. U kunt verschillende load balancing-algoritmen uitproberen in het configuratiegedeelte of de .
Conclusie: load balancer HAProxy
Gefeliciteerd met de succesvolle configuratie van de load balancer HAProxy! Zelfs met een basisconfiguratie voor load balancing kunt u de prestaties en beschikbaarheid van uw webapplicatie aanzienlijk verbeteren. Deze handleiding is slechts een inleiding tot load balancing met HAProxy, dat veel meer kan dan wat in een beknopte configuratiehandleiding beschreven kan worden. We raden aan om te experimenteren met verschillende configuraties met behulp van , beschikbaar voor HAProxy, en daarna te beginnen met het plannen van load balancing voor uw productieomgeving.
Door meerdere hosts te gebruiken voor de bescherming van uw webservice met een back-up vermogen, kan de load balancer zelf nog steeds een single point of failure zijn. U kunt de hoge beschikbaarheid nog verder verhogen door een drijvend IP tussen meerdere load balancers in te stellen. U kunt hier meer over leren in ons .
Meer over de cursus ***
Bron: habr.com
