Oversættelsen af artiklen blev udarbejdet på tærsklen til kursets start
Belastningsbalancering er en almindelig løsning til at skalere ud af webapplikationer på tværs af flere værter, samtidig med at brugerne får et enkelt adgangspunkt til en tjeneste.
HAProxy sigter mod at optimere ressourceforbruget, maksimere gennemløbet, minimere responstiden og undgå at overbelaste en enkelt ressource. Det kan installeres på en række Linux-distributioner, såsom CentOS 8, som vi vil fokusere på i denne vejledning, samt systemer
HAProxy er særligt velegnet til websteder med meget høj trafik og bruges derfor ofte til at forbedre pålideligheden og ydeevnen af multi-server webservice konfigurationer. Denne vejledning skitserer trinene til at konfigurere HAProxy som en load balancer på en CentOS 8 cloud-vært, som derefter dirigerer trafik til dine webservere.
Som en forudsætning for de bedste resultater bør du have mindst to webservere og en load balancing-server. Webservere skal køre mindst en grundlæggende webservice såsom nginx eller httpd for at teste belastningsbalancering mellem dem.
Installation af HAProxy på CentOS 8
På grund af det faktum, at HAProxy er et hurtigt udviklende open source-program, er distributionen, der er tilgængelig for dig i standard CentOS-lagrene, muligvis ikke den nyeste version. For at finde ud af den seneste version skal du køre følgende kommando:
sudo yum info haproxy
HAProxy har altid tre stabile versioner at vælge imellem: de to seneste understøttede versioner og den tredje, ældre version, der stadig modtager kritiske opdateringer. Du kan altid tjekke den seneste stabile version på HAProxy-webstedet og derefter beslutte, hvilken version du vil arbejde med.
I denne guide vil vi installere den seneste stabile version 2.0, som endnu ikke var tilgængelig i standardlagrene i skrivende stund. Du skal installere det fra den originale kilde. Men tjek først, om du har opfyldt de nødvendige betingelser for at downloade og kompilere programmet.
sudo yum install gcc pcre-devel tar make -y
Download kildekoden ved hjælp af kommandoen nedenfor. Du kan tjekke, om der er en nyere version tilgængelig på
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Når overførslen er færdig, skal du udpakke filerne ved hjælp af kommandoen nedenfor:
tar xzvf ~/haproxy.tar.gz -C ~/
Skift til den udpakkede kildemappe:
cd ~/haproxy-2.0.7
Kompiler derefter programmet til dit system:
make TARGET=linux-glibc
Og installer til sidst selve HAProxy:
sudo make install
Nu er HAProxy installeret, men det kræver nogle yderligere manipulationer for at få det til at fungere. Lad os fortsætte med at opsætte softwaren og tjenesterne nedenfor.
Opsætning af HAProxy til din server
Tilføj nu følgende mapper og statistikfil for HAProxy-poster:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Opret et symbolsk link til de binære filer, så du kan køre HAProxy-kommandoer som en normal bruger:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Hvis du vil tilføje proxyen til dit system som en tjeneste, skal du kopiere filen haproxy.init fra eksempler til din /etc/init.d-mappe. Rediger filens tilladelser, så scriptet kører, og genindlæs derefter systemd-dæmonen:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload
Du skal også tillade, at tjenesten automatisk genstarter ved systemstart:
sudo chkconfig haproxy on
For nemheds skyld anbefales det også at tilføje en ny bruger til at køre HAProxy:
sudo useradd -r haproxy
Derefter kan du kontrollere det installerede versionsnummer igen med følgende kommando:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
I vores tilfælde skal versionen være 2.0.7, som vist i eksempeloutputtet ovenfor.
Endelig er standardfirewallen i CentOS 8 ret restriktiv for dette projekt. Brug følgende kommandoer til at aktivere de nødvendige tjenester og nulstille firewallen:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Opsætning af en load balancer
Opsætning af HAProxy er en ret simpel proces. Det eneste, du skal gøre, er at fortælle HAProxy, hvilke forbindelser den skal lytte på, og hvor de skal videresendes.
Dette gøres ved at oprette en konfigurationsfil /etc/haproxy/haproxy.cfg med definerende indstillinger. Du kan læse om HAProxy-konfigurationsmuligheder
Lastbalancering ved transportlaget (lag 4)
Lad os starte med den grundlæggende opsætning. Opret en ny konfigurationsfil, f.eks vi med nedenstående kommando:
sudo vi /etc/haproxy/haproxy.cfg
Tilføj følgende sektioner til filen. Erstatte server navn den der skal kalde dine servere på statistiksiden, og private_ip - private IP-adresser på de servere, som du vil lede webtrafik til. Du kan tjekke private IP-adresser
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
Dette definerer en transportlags belastningsbalancer (lag 4) eksternt navngivet http_front listening på port 80, som så dirigerer trafik til standard backend med navnet http_back. Yderligere statistik /haproxy?stats forbinder statistiksiden til den angivne adresse.
Forskellige belastningsbalanceringsalgoritmer.
Angivelse af servere i backend-sektionen gør det muligt for HAProxy at bruge disse servere til belastningsbalancering i henhold til round robin-algoritmen, når det er muligt.
Balanceringsalgoritmer bruges til at bestemme, hvilken server i backend hver forbindelse sendes til. Her er nogle af de nyttige muligheder:
- Runde Robin: hver server bruges på skift i henhold til dens vægt. Dette er den glatteste og mest retfærdige algoritme, når servernes behandlingstid forbliver jævnt fordelt. Denne algoritme er dynamisk, hvilket giver dig mulighed for at justere vægten af serveren på farten.
- Leastconn: serveren med færrest forbindelser er valgt. Round robin udføres mellem servere med samme belastning. Brug af denne algoritme anbefales til lange sessioner som LDAP, SQL, TSE osv., men ikke særlig velegnet til korte sessioner som HTTP.
- Først: den første server med ledige forbindelsespladser modtager forbindelsen. Servere vælges fra det laveste numeriske ID til det højeste, hvilket som standard svarer til serverens position i farmen. Når serveren når maxconn-værdien, bruges den næste server.
- Kilde: Kilde-IP-adressen hashes og divideres med den samlede vægt af kørende servere for at bestemme, hvilken server der modtager anmodningen. Den samme klient IP-adresse vil således altid gå til den samme server, mens serverne forbliver uændrede.
Konfiguration af belastningsbalancering på applikationslaget (lag 7)
En anden tilgængelig mulighed er at konfigurere belastningsbalanceren til at arbejde på applikationslaget (lag 7), hvilket er nyttigt, når dele af din webapplikation er placeret på forskellige værter. Dette kan opnås ved at drosle overførslen af forbindelsen, for eksempel ved hjælp af URL.
Åbn HAProxy-konfigurationsfilen med en teksteditor:
sudo vi /etc/haproxy/haproxy.cfg
Opsæt derefter frontend- og backend-segmenterne i henhold til eksemplet nedenfor:
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 check
Frontenden erklærer en ACL-regel ved navn url_blog, der gælder for alle forbindelser med stier, der begynder med /blog. Use_backend specificerer, at forbindelser, der matcher url_blog-betingelsen, skal betjenes af backend med navnet blog_back, og alle andre anmodninger håndteres af standard backend.
På bagsiden opsætter konfigurationen to servergrupper: http_back, som før, og en ny kaldet blog_back, som håndterer forbindelser til example.com/blog.
Når du har ændret indstillingerne, skal du gemme filen og genstarte HAProxy med følgende kommando:
sudo systemctl restart haproxy
Hvis du får advarsler eller fejl under start, skal du kontrollere konfigurationen for nogen og sørge for, at du har oprettet alle de nødvendige filer og mapper, og derefter prøve at genstarte igen.
Test af opsætningen
Når HAProxy er konfigureret og kører, skal du åbne den offentlige IP-adresse på load balancer-serveren i en browser og kontrollere, om du har oprettet forbindelse til backend korrekt. Stats uri-parameteren i konfigurationen opretter en statistikside på den angivne adresse.
http://load_balancer_public_ip/haproxy?stats
Når du indlæser statistiksiden, hvis alle dine servere er grønne, så lykkedes opsætningen!
Statistiksiden indeholder nogle nyttige oplysninger til at spore dine webhosts, herunder op/ned tid og antal sessioner. Hvis serveren er markeret rødt, skal du sørge for, at serveren er oppe, og at du kan pinge den fra load balanceren.
Hvis din load balancer ikke reagerer, skal du sørge for, at HTTP-forbindelser ikke blokeres af en firewall. Sørg også for, at HAProxy arbejder med kommandoen nedenfor:
sudo systemctl status haproxy
Beskyttelse af statistiksiden med en adgangskode
Men hvis statistiksiden bare er opført i frontend, så er den åben for offentligheden, hvilket måske ikke er en god idé. I stedet kan du tildele dit eget portnummer til den ved at tilføje eksemplet nedenfor til slutningen af din haproxy.cfg-fil. Erstatte brugernavn и adgangskode til noget sikkert:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Når du har tilføjet den nye lyttergruppe, skal du fjerne den gamle stats-uri-reference fra frontend-gruppen. Når du er færdig, skal du gemme filen og genstarte HAProxy.
sudo systemctl restart haproxy
Åbn derefter load balanceren igen med det nye portnummer og log ind med det brugernavn og adgangskode, du har angivet i konfigurationsfilen.
http://load_balancer_public_ip:8181
Sørg for, at alle dine servere stadig er grønne, og åbn derefter kun load balancer IP uden nogen portnumre i din browser.
http://load_balancer_public_ip/
Hvis du i det mindste har en række forskellige destinationssider på dine interne servere, vil du bemærke, at hver gang du genindlæser siden, får du et svar fra en anden vært. Du kan prøve forskellige balanceringsalgoritmer i konfigurationssektionen eller se
Konklusion: HAProxy Load Balancer
Tillykke med opsætningen af din HAProxy load balancer! Selv med en grundlæggende belastningsbalancering opsætning, kan du i høj grad forbedre ydeevnen og tilgængeligheden af din webapplikation. Denne guide er blot en introduktion til belastningsbalancering med HAProxy, som er i stand til meget mere end hvad der kan beskrives i en hurtig opsætningsguide. Vi anbefaler at eksperimentere med forskellige konfigurationer vha
Ved at bruge flere værter til at beskytte din webtjeneste med frihøjde, kan selve belastningsbalanceren stadig repræsentere et fejlpunkt. Du kan yderligere forbedre høj tilgængelighed ved at opsætte en flydende IP mellem flere load balancere. Du kan få mere at vide om dette i vores
Mere om kurset
Kilde: www.habr.com