Installerer load balancer HAProxy på CentOS

Oversættelsen af artiklen er udarbejdet forud for begyndelsen af kurset «Linux-administrator. Virtualisering og kluster-systemer»

Installerer load balancer HAProxy på CentOS

Lastbalancering er en almindelig løsning til horisontal skalering af webapplikationer på flere værter, der giver brugerne en samlet adgangsone til tjenesten. HAProxy 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 Debian 8 og Ubuntu 16.

Installerer load balancer HAProxy på CentOS

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 haproxy

HAProxy 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 -y

Download kildekoden med kommandoen nedenfor. Du kan tjekke, om der findes en nyere version tilgængelig på HAProxy downloadside.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Nå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.7

Kompiler derefter programmet til dit system:

make TARGET=linux-glibc

Og til sidst, installer selve HAProxy:

sudo make install

Nu 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/stats

Opret 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/haproxy

Hvis 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-reload

Du skal også sikre, at tjenesten er aktiveret til automatisk genstart 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 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 --reload

Opsæ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 på dokumentationssiden, 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.cfg

Tilfø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 på UpClouds kontrolpanel 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 check

Dette 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.cfg

Derefter 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 check

Frontend 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 haproxy

Hvis 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?stats

Når du indlæser statistiksiden, hvis alle dine servere vises i grønt, så er opsætningen lykkedes!

Installerer load balancer HAProxy på CentOS

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 haproxy

Beskyt 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:password

Nå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:8181

Sø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å den komplette dokumentation.

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 den omfattende dokumentation, 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 artikel om flydende IP-adresser på UpCloud.

Lær mere om kurset «Linux-administrator. Virtualisering og kluster-systemer»***

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster