Oversættelsen af artiklen er udarbejdet forud for begyndelsen af kurset

Lastbalancering er en almindelig løsning til horisontal skalering af webapplikationer på flere værter, der giver brugerne en samlet adgangsone til tjenesten. er et af de mest populære open source-programmer til lastbalancering, som også sikrer høj tilgængelighed og proxy-funktionalitet.
HAProxy sigter mod at optimere ressourceudnyttelsen, maksimere båndbredden, minimere responstiden og undgå overbelastning af hver enkelt ressource. Den kan installeres på mange Linux-distributioner, såsom CentOS 8, som vi vil fokusere på i denne vejledning, samt på systemer og .

HAProxy er især velegnet til hjemmesider med meget høj trafik og bruges derfor ofte til at forbedre pålideligheden og ydeevnen i flere serverkonfigurationer. Denne vejledning beskriver trinnene til at konfigurere HAProxy som en lastbalancer på en cloud-host CentOS 8, som derefter dirigerer trafikken til dine webservere.
Som en nødvendig forudsætning for at opnå de bedste resultater skal du have mindst to webservere og en server til lastbalancering. På webserverne skal der være en grundlæggende webtjeneste kørende, som f.eks. nginx eller httpd, for at kunne teste lastbalanceringen mellem dem.
Installation af HAProxy på CentOS 8
Fordi HAProxy er en hurtigt udviklende open source-applikation, kan distributionen, der er tilgængelig i de standard repositories for CentOS, muligvis ikke være den nyeste version. For at finde den aktuelle version skal du køre følgende kommando:
sudo yum info haproxyHAProxy tilbyder altid tre stabile versioner: de to seneste understøttede versioner og en tredje, ældre version, der stadig modtager kritiske opdateringer. Du kan altid kontrollere den nyeste stabile version angivet på HAProxy's hjemmeside og derefter beslutte, hvilken version du ønsker at arbejde med.
I denne vejledning vil vi installere den nyeste stabile version 2.0, som endnu ikke har været tilgængelig i de standard repositories på tidspunktet for skrivningen af denne vejledning. Du skal installere den fra kilden. Men først skal du kontrollere, om de nødvendige betingelser for download og kompilering af programmet er opfyldt.
sudo yum install gcc pcre-devel tar make -yDownload kildekoden med kommandoen nedenfor. Du kan tjekke, om der findes en nyere version tilgængelig på .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzNår download er færdig, skal du pakke filerne ud med følgende kommando:
tar xzvf ~/haproxy.tar.gz -C ~/Gå ind i den udpakkede mappe med kildeteksten:
cd ~/haproxy-2.0.7Kompiler derefter programmet til dit system:
make TARGET=linux-glibcOg til sidst, installer selve HAProxy:
sudo make installNu er HAProxy installeret, men der kræves nogle yderligere skridt for at få det til at fungere. Lad os fortsætte med konfigurationen af software og tjenester nedenfor.
Konfiguration af HAProxy til din server
Nu skal du tilføje følgende mapper og statistikfil til HAProxy-posterne:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/statsOpret et symbolsk link til de binære filer, så du kan køre HAProxy-kommandoer som en almindelig bruger:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxyHvis du ønsker at tilføje proxy-serveren til systemet som en tjeneste, skal du kopiere filen haproxy.init fra examples til din mappe /etc/init.d. Rediger filens adgangsrettigheder, så scriptet kan køres, og genindlæs systemd-daemonen:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reloadDu skal også sikre, at tjenesten er aktiveret til automatisk genstart ved systemstart:
sudo chkconfig haproxy onFor nemheds skyld anbefales det også at tilføje en ny bruger til at køre HAProxy:
sudo useradd -r haproxyDerefter kan du tjekke installationsversionen 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 det ovenstående eksempel på output.
Endelig er firewallen i CentOS 8 som standard ret restriktiv for dette projekt. Brug følgende kommandoer for at tillade de nødvendige tjenester og genindlæse firewallen:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reloadOpsætningsbalance af belastning
Opsætning af HAProxy er en forholdsvis enkel proces. I bund og grund skal du blot informere HAProxy om, hvilke forbindelser den skal lytte til, og hvor den skal videresende dem.
Dette gøres ved at oprette en konfigurationsfil /etc/haproxy/haproxy.cfg med de relevante indstillinger. Du kan læse om konfigurationsparametrene for HAProxy , hvis du vil vide mere om dette.
Belastningsbalance på transportniveau (lag 4)
Lad os begynde med grundlæggende opsætning. Opret en ny konfigurationsfil, for eksempel med vi med følgende kommando:
sudo vi /etc/haproxy/haproxy.cfgTilføj følgende sektioner til filen. Erstat server_name med det, der skal kalde dine servere på statistiksiden, og private_ip — de private IP-adresser på de servere, som du ønsker at videresende webtrafikken til. Du kan kontrollere de private IP-adresser og under fanen Privat netværk i menuen Netværk.
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 checkDette definerer en transportsbalance (lag 4), kaldet http_front, der lytter på port 80, og som derefter videresender trafikken til backend'en med navnet http_back som standard. Den ekstra statistik /haproxy?stats tilslutter statistics-siden på den angivne adresse.
Forskellige algoritmer til belastningsbalance.
At angive serverne i backend-sektionen gør det muligt for HAProxy at bruge disse servere til belastningsbalance i henhold til roundrobin-algoritmen, når det er muligt.
Belastningsbalanceringsalgoritmer bruges til at bestemme, hvilken server i backend'en hvert forbindelsen sendes til. Her er nogle nyttige muligheder:
- Roundrobin: hver server bruges i rækkefølge i henhold til sin vægt. Dette er den mest glidende og retfærdige algoritme, når behandlingstiden for serverne er jævnt fordelt. Denne algoritme er dynamisk og gør det muligt at justere serverens vægt on-the-fly.
- Leastconn: en server med det laveste antal forbindelser vælges. Cykling udføres mellem servere med samme belastning. Anvendelse af denne algoritme anbefales til lange sessioner som LDAP, SQL, TSE osv., men den egner sig ikke så godt til korte sessioner som HTTP.
- Først: den første server med tilgængelige slots til forbindelser får forbindelsen. Servere vælges fra den laveste nummeriske ID til den højeste, som som standard svarer til serverens placering i farmen. Når serveren når det maksimale antal forbindelser, bruges den næste server.
- Kilde: IP-adressen fra klienten hashes og deles med den samlede vægt af de kørende servere for at bestemme, hvilken server der skal modtage anmodningen. På den måde vil den samme klient-IP altid blive tildelt den samme server, mens serverne forbliver uændrede.
Konfiguration af belastningsfordeling på applikationslaget (lag 7)
En anden tilgængelig mulighed er at konfigurere belastningsfordeleren til at arbejde på applikationslaget (lag 7), hvilket er nyttigt, når dele af dit webapplikation er placeret på forskellige værter. Dette kan opnås ved at regulere forbindelsens overførsel, for eksempel baseret på URL.
Åbn HAProxy-konfigurationsfilen med en teksteditor:
sudo vi /etc/haproxy/haproxy.cfgDerefter konfigurerer du 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 checkFrontend erklærer en ACL-regel med navnet url_blog, der anvendes på alle forbindelser med stier, der begynder med /blog. Use_backend definerer, at forbindelser, der opfylder betingelsen url_blog, skal håndteres af backend med navnet blog_back, mens alle andre anmodninger håndteres af standard backend.
Fra backend-siden sætter konfigurationen to grupper af servere: http_back, som før, og en ny kaldet blog_back, som håndterer forbindelser til example.com/blog.
Efter at have ændret indstillingerne, gem filen og genstart HAProxy med følgende kommando:
sudo systemctl restart haproxyHvis du modtog nogen advarsler eller fejlmeddelelser ved opstart, skal du kontrollere konfigurationen for dem og sikre, at du har oprettet alle nødvendige filer og mapper, og derefter prøve at genstarte igen.
Test af opsætning
Når HAProxy er konfigureret og kører, skal du åbne den offentlige IP-adresse for load balanceren i din browser og kontrollere, om du er korrekt tilsluttet backend. Parameteren stats uri i konfigurationen opretter en statistiksida på den angivne adresse.
http://load_balancer_public_ip/haproxy?statsNår du indlæser statistiksiden, hvis alle dine servere vises i grønt, så er opsætningen lykkedes!

Statistiksiden indeholder nyttige oplysninger til at overvåge dine webhoste, herunder oppetid/nedetid og antal sessioner. Hvis serveren vises i rødt, så sørg for, at serveren er tændt, og at du kan pinge den fra load balancing-maskinen.
Hvis din load balancer ikke svarer, så sørg for, at HTTP-forbindelser ikke blokeres af en firewall. Sørg også for, at HAProxy kører ved hjælp af kommandoen nedenfor:
sudo systemctl status haproxyBeskyt statistiksiden med adgangskode
Men hvis statistiksiden blot er angivet i frontenden, så er den åben for offentligheden, hvilket muligvis ikke er en god idé. I stedet kan du tildele den et eget portnummer ved at tilføje følgende eksempel til slutningen af din haproxy.cfg-fil. Erstat brugernavn og adgangskode med noget sikkert:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:passwordNår du har tilføjet den nye lyttergruppe, skal du fjerne det gamle link til stats uri 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 den adgangskode, du angav i konfigurationsfilen.
http://load_balancer_public_ip:8181Sørg for, at alle dine servere stadig vises i grønt, og åbn derefter kun IP-adressen for load balanceren uden portnumre i din browser.
http://load_balancer_public_ip/Hvis dine interne servere har en vis variation af målrettede sider, vil du bemærke, at hver gang du genindlæser siden, får du svar fra en anden vært. Du kan prøve forskellige load balancing-algoritmer i konfigurationsafsnittet eller se på .
Konklusion: HAProxy load balancer
Tillykke med den vellykkede opsætning af HAProxy load balanceren! Selv med en grundlæggende opsætning kan du betydeligt forbedre ydeevnen og tilgængeligheden af din webapplikation. Denne vejledning er kun en introduktion til load balancing med HAProxy, som kan gøre meget mere end det, der kan beskrives i en kort installationsvejledning. Vi anbefaler, at du eksperimenterer med forskellige konfigurationer ved hjælp af , der er tilgængelig for HAProxy, og derefter begynde at planlægge load balancing for dit produktionsmiljø.
Ved at bruge flere værter for at beskytte din webservice med overskydende kapacitet kan load balanceren stadig udgøre et enkelt fejlpunkt. Du kan øge høj tilgængelighed yderligere ved at installere en flydende IP mellem flere load balancere. Du kan lære mere om dette i vores .
Lær mere om kurset ***
Kilde: habr.com
