Oversettelsen av artikkelen ble utarbeidet like før kursstart
Lastbalansering er en vanlig løsning for horisontalt skalering av nettapplikasjoner på tvers av flere verter, samtidig som brukerne får ett enkelt tilgangspunkt til tjenesten.
HAProxy streber etter å optimalisere ressursbruken, maksimere gjennomstrømmingen, minimere responstiden og unngå overbelastning av individuelle ressurser. Det kan installeres på en rekke Linux-distribusjoner, for eksempel CentOS 8, som vi vil fokusere på i denne veiledningen, samt systemer
HAProxy er spesielt egnet for nettsteder med svært høy trafikk og brukes derfor ofte for å forbedre påliteligheten og ytelsen til multi-server webtjenestekonfigurasjoner. Denne veiledningen skisserer trinnene for å sette opp HAProxy som en lastbalanser på en CentOS 8-skyvert, som deretter ruter trafikk til nettserverne dine.
Som en forutsetning for best resultat bør du ha minst to webservere og en lastbalanseringsserver. Nettservere må kjøre minst en grunnleggende nettjeneste som nginx eller httpd for å teste lastbalansering mellom dem.
Installere HAProxy på CentOS 8
Fordi HAProxy er en åpen kildekode-applikasjon i rask utvikling, kan det hende at distribusjonen som er tilgjengelig for deg i standard CentOS-repositoriene, ikke er den nyeste versjonen. For å finne ut gjeldende versjon, kjør følgende kommando:
sudo yum info haproxy
HAProxy har alltid tre stabile versjoner å velge mellom: de to siste støttede versjonene og en tredje, eldre versjon som fortsatt mottar kritiske oppdateringer. Du kan alltid sjekke den siste stabile versjonen som er oppført på HAProxy-nettstedet og deretter bestemme hvilken versjon du vil jobbe med.
I denne veiledningen vil vi installere den siste stabile versjonen 2.0, som ennå ikke var tilgjengelig i standarddepotene da veiledningen ble skrevet. Du må installere den fra den opprinnelige kilden. Men sjekk først om du har oppfylt de nødvendige betingelsene for å laste ned og kompilere programmet.
sudo yum install gcc pcre-devel tar make -y
Last ned kildekoden ved å bruke kommandoen nedenfor. Du kan sjekke om det er en nyere versjon tilgjengelig på
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Når nedlastingen er fullført, pakk ut filene ved å bruke kommandoen nedenfor:
tar xzvf ~/haproxy.tar.gz -C ~/
Gå til den utpakkede kildekatalogen:
cd ~/haproxy-2.0.7
Deretter kompilerer du programmet for systemet ditt:
make TARGET=linux-glibc
Og til slutt, installer selve HAProxy:
sudo make install
HAProxy er nå installert, men det krever noen ekstra manipulasjoner for å få det til å fungere. La oss fortsette å sette opp programvaren og tjenestene nedenfor.
Sette opp HAProxy for serveren din
Legg nå til følgende kataloger og statistikkfil for HAProxy-oppføringene:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Lag en symbolsk lenke for binærfilene slik at du kan kjøre HAProxy-kommandoer som en vanlig bruker:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Hvis du vil legge til en proxy til systemet som en tjeneste, kopierer du filen haproxy.init fra eksempler til /etc/init.d-katalogen. Rediger filtillatelsene slik at skriptet kjøres, og start deretter systemd-demonen på nytt:
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 må også tillate at tjenesten starter automatisk på nytt når systemet starter:
sudo chkconfig haproxy on
For enkelhets skyld anbefales det også å legge til en ny bruker for å kjøre HAProxy:
sudo useradd -r haproxy
Etter dette kan du sjekke det installerte versjonsnummeret igjen ved å bruke følgende kommando:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
I vårt tilfelle bør versjonen være 2.0.7, som vist i eksempelutgangen ovenfor.
Til slutt er standardbrannmuren i CentOS 8 ganske restriktiv for dette prosjektet. Bruk følgende kommandoer for å tillate nødvendige tjenester og tilbakestille brannmuren:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Oppsett av lastbalanser
Å sette opp HAProxy er en ganske enkel prosess. I hovedsak er alt du trenger å gjøre å fortelle HAProxy hvilke tilkoblinger den skal lytte etter og hvor den skal videresende dem.
Dette gjøres ved å lage en konfigurasjonsfil /etc/haproxy/haproxy.cfg med definerende innstillinger. Du kan lese om HAProxy-konfigurasjonsalternativer
Lastbalansering ved transportlaget (lag 4)
La oss starte med det grunnleggende oppsettet. Opprett en ny konfigurasjonsfil, for eksempel ved å bruke vi med kommandoen nedenfor:
sudo vi /etc/haproxy/haproxy.cfg
Legg til følgende seksjoner i filen. Erstatte Server navn hva skal kalle serverne dine på statistikksiden, og private_ip — private IP-adresser til serverne du vil lede nettrafikk til. Du kan sjekke 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 lastbalanserer (lag 4) eksternt kalt http_front lytting på port 80, som deretter videresender trafikk til en standard backend kalt http_back. Ytterligere statistikk /haproxy?stats kobler statistikksiden til den angitte adressen.
Ulike lastbalanseringsalgoritmer.
Ved å spesifisere servere i backend-delen kan HAProxy bruke disse serverne for lastbalansering i henhold til en round-robin-algoritme når det er mulig.
Balanseringsalgoritmer brukes til å bestemme hvilken server i backend hver tilkobling sendes til. Her er noen av de nyttige alternativene:
- Rounddrobin: Hver server brukes etter tur i henhold til dens vekt. Dette er den jevneste og mest rettferdige algoritmen når behandlingstiden til serverne forblir jevnt fordelt. Denne algoritmen er dynamisk, slik at serverens vekt kan justeres i farten.
- Leastconn: serveren med færrest tilkoblinger er valgt. Round robin utføres mellom servere med samme belastning. Bruk av denne algoritmen anbefales for lange økter som LDAP, SQL, TSE osv., men den egner seg lite for korte økter som HTTP.
- Først: Den første serveren med tilgjengelige tilkoblingsplasser mottar tilkoblingen. Servere velges fra den laveste numeriske IDen til den høyeste, som er standard til serverens posisjon i farmen. Når en server når maxconn, brukes neste server.
- kilde: Kilde-IP-adressen hashes og divideres med den totale vekten av kjørende servere for å bestemme hvilken server som vil motta forespørselen. På denne måten vil den samme klientens IP-adresse alltid gå til den samme serveren, mens serverne forblir de samme.
Sette opp lastbalansering på applikasjonsnivå (lag 7)
Et annet tilgjengelig alternativ er å konfigurere en lastbalanser for å kjøre på applikasjonslaget (lag 7), noe som er nyttig når deler av nettapplikasjonen din er plassert på forskjellige verter. Dette kan oppnås ved å strupe overføringen av forbindelsen, for eksempel med URL.
Åpne HAProxy-konfigurasjonsfilen ved hjelp av et tekstredigeringsprogram:
sudo vi /etc/haproxy/haproxy.cfg
Konfigurer deretter frontend- og backend-segmentene 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 kalt url_blog som gjelder for alle forbindelser med stier som starter med /blog. Use_backend spesifiserer at tilkoblinger som samsvarer med url_blog-betingelsen skal betjenes av en backend kalt blog_back, og alle andre forespørsler håndteres av standard backend.
På backend-siden setter konfigurasjonen opp to grupper med servere: http_back, som før, og en ny kalt blog_back, som håndterer tilkoblinger til example.com/blog.
Etter å ha endret innstillingene, lagre filen og start HAProxy på nytt ved å bruke følgende kommando:
sudo systemctl restart haproxy
Hvis du mottar advarsler eller feilmeldinger under oppstart, sjekk konfigurasjonen for dem og sørg for at du har opprettet alle nødvendige filer og mapper, og prøv deretter å starte på nytt.
Tester oppsettet
Når HAProxy er konfigurert og kjører, åpner du den offentlige IP-adressen til lastbalanseringsserveren i en nettleser og kontrollerer om du er koblet til backend riktig. Statistisk uri-parameteren i konfigurasjonen oppretter en statistikkside på den angitte adressen.
http://load_balancer_public_ip/haproxy?stats
Når du laster inn statistikksiden, hvis alle serverne dine viser grønt, var oppsettet vellykket!
Statistikksiden inneholder noe nyttig informasjon for å spore webvertene dine, inkludert opp/ned tid og antall økter. Hvis serveren er merket rødt, sørg for at serveren er slått på og at du kan pinge den fra lastbalanseringsmaskinen.
Hvis lastbalanseren ikke svarer, må du kontrollere at HTTP-tilkoblinger ikke blokkeres av en brannmur. Sørg også for at HAProxy fungerer ved å bruke kommandoen nedenfor:
sudo systemctl status haproxy
Beskytte statistikksiden med et passord
Men hvis statistikksiden bare er oppført på frontend, er den åpen for alle å se, noe som kanskje ikke er en god idé. I stedet kan du tilordne den et tilpasset portnummer ved å legge til eksemplet nedenfor på slutten av haproxy.cfg-filen. Erstatte brukernavn и passord for noe trygt:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Etter å ha lagt til en ny lyttergruppe, fjern den gamle statistikk-uri-lenken fra frontend-gruppen. Når du er ferdig, lagre filen og start HAProxy på nytt.
sudo systemctl restart haproxy
Åpne deretter lastbalanseren igjen med det nye portnummeret og logg på med brukernavnet og passordet du spesifiserte i konfigurasjonsfilen.
http://load_balancer_public_ip:8181
Sørg for at alle serverne dine fortsatt viser grønt, og åpne deretter bare lastbalanserings-IP-en uten noen portnumre i nettleseren din.
http://load_balancer_public_ip/
Hvis du i det minste har en rekke landingssider på back-end-serverne dine, vil du legge merke til at hver gang du laster inn siden på nytt, får du et svar fra en annen vert. Du kan prøve forskjellige balanseringsalgoritmer i konfigurasjonsdelen eller sjekke ut
Konklusjon: HAProxy Load Balancer
Gratulerer med vellykket oppsett av HAProxy load balancer! Selv med et grunnleggende belastningsbalanseringsoppsett kan du forbedre ytelsen og tilgjengeligheten til nettapplikasjonen din betraktelig. Denne veiledningen er bare en introduksjon til lastbalansering med HAProxy, som er i stand til mye mer enn det som kan dekkes i hurtigoppsettsguiden. Vi anbefaler å eksperimentere med forskjellige konfigurasjoner ved å bruke
Ved å bruke flere verter for å beskytte nettjenesten din med takhøyde, kan selve lastbalanseren fortsatt være et feilpunkt. Du kan forbedre høy tilgjengelighet ytterligere ved å installere en flytende IP mellom flere lastbalansere. Du kan finne ut mer om dette i vår
Mer om kurset
Kilde: www.habr.com