Installera HAProxy load balancer på CentOS

Översättningen av artikeln förbereddes strax före kursstart "Linux-administratör. Virtualisering och klustring"

Installera HAProxy load balancer på CentOS

Lastbalansering är en vanlig lösning för att horisontellt skala webbapplikationer över flera värdar samtidigt som användarna får en enda åtkomstpunkt till tjänsten. haproxy är en av de mest populära mjukvaran för belastningsbalansering med öppen källkod som också ger hög tillgänglighet och proxyfunktionalitet.

HAProxy strävar efter att optimera resursanvändningen, maximera genomströmningen, minimera svarstiden och undvika att överbelasta någon enskild resurs. Det kan installeras på en mängd olika Linux-distributioner, såsom CentOS 8, som vi kommer att fokusera på i den här guiden, såväl som system Debian 8 и ubuntu 16.

Installera HAProxy load balancer på CentOS

HAProxy är särskilt lämplig för webbplatser med mycket hög trafik och används därför ofta för att förbättra tillförlitligheten och prestandan för webbtjänstkonfigurationer med flera servrar. Den här guiden beskriver stegen för att ställa in HAProxy som en lastbalanserare på en CentOS 8 molnvärd, som sedan dirigerar trafik till dina webbservrar.

Som en förutsättning för bästa resultat bör du ha minst två webbservrar och en lastbalanseringsserver. Webbservrar måste köra minst en grundläggande webbtjänst som nginx eller httpd för att kunna testa lastbalansering mellan dem.

Installera HAProxy på CentOS 8

Eftersom HAProxy är ett snabbt utvecklande öppen källkodsprogram, kanske distributionen som är tillgänglig för dig i de vanliga CentOS-förråden inte är den senaste versionen. För att ta reda på den aktuella versionen, kör följande kommando:

sudo yum info haproxy

HAProxy tillhandahåller alltid tre stabila versioner att välja mellan: de två senaste versionerna som stöds och en tredje, äldre version som fortfarande får viktiga uppdateringar. Du kan alltid kontrollera den senaste stabila versionen på HAProxys webbplats och sedan bestämma vilken version du vill arbeta med.

I den här guiden kommer vi att installera den senaste stabila versionen 2.0, som ännu inte var tillgänglig i standardförråden när guiden skrevs. Du måste installera den från den ursprungliga källan. Men först, kontrollera om du har uppfyllt de nödvändiga villkoren för att ladda ner och kompilera programmet.

sudo yum install gcc pcre-devel tar make -y

Ladda ner källkoden med kommandot nedan. Du kan kontrollera om det finns en nyare version tillgänglig på HAProxy nedladdningssida.

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

När nedladdningen är klar, extrahera filerna med kommandot nedan:

tar xzvf ~/haproxy.tar.gz -C ~/

Gå till den uppackade källkatalogen:

cd ~/haproxy-2.0.7

Kompilera sedan programmet för ditt system:

make TARGET=linux-glibc

Och slutligen, installera HAProxy själv:

sudo make install

HAProxy är nu installerat, men det kräver några ytterligare manipulationer för att få det att fungera. Låt oss fortsätta att installera programvaran och tjänsterna nedan.

Konfigurera HAProxy för din server

Lägg nu till följande kataloger och statistikfil för HAProxy-posterna:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Skapa en symbolisk länk för binärerna så att du kan köra HAProxy-kommandon som en vanlig användare:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Om du vill lägga till en proxy till ditt system som en tjänst, kopiera filen haproxy.init från exempel till din /etc/init.d-katalog. Redigera filbehörigheterna så att skriptet körs och starta sedan om systemd-demonen:

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åste också tillåta att tjänsten startas om automatiskt när systemet startar:

sudo chkconfig haproxy on

För enkelhetens skull rekommenderas det också att lägga till en ny användare för att köra HAProxy:

sudo useradd -r haproxy

Efter detta kan du kontrollera det installerade versionsnumret igen med följande kommando:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

I vårt fall bör versionen vara 2.0.7, som visas i exemplet ovan.

Slutligen är standardbrandväggen i CentOS 8 ganska restriktiv för detta projekt. Använd följande kommandon för att tillåta nödvändiga tjänster och återställa brandväggen:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Inställning av lastbalanserare

Att installera HAProxy är en ganska enkel process. Allt du behöver göra är att berätta för HAProxy vilka anslutningar den ska lyssna efter och var den ska vidarebefordra dem.

Detta görs genom att skapa en konfigurationsfil /etc/haproxy/haproxy.cfg med definierande inställningar. Du kan läsa om HAProxy-konfigurationsalternativ på dokumentationssidanom du vill veta mer om det.

Lastbalansering vid transportskiktet (lager 4)

Låt oss börja med grundinställningen. Skapa en ny konfigurationsfil, till exempel med hjälp av vi med kommandot nedan:

sudo vi /etc/haproxy/haproxy.cfg

Lägg till följande avsnitt i filen. Byta ut servernamn vad ska anropa dina servrar på statistiksidan, och privat_ip — privata IP-adresser för de servrar som du vill dirigera webbtrafik till. Du kan kontrollera privata IP-adresser på UpCloud-kontrollpanelen och på fliken Privat nätverk i menyn nätverks.

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

Detta definierar en lastbalanserare för transportlager (lager 4) som externt heter http_front som lyssnar på port 80, som sedan vidarebefordrar trafik till en standardbackend som heter http_back. Ytterligare statistik /haproxy?stats kopplar statistiksidan till den angivna adressen.

Olika lastbalanseringsalgoritmer.

Genom att specificera servrar i backend-sektionen kan HAProxy använda dessa servrar för lastbalansering enligt en round-robin-algoritm när det är möjligt.

Balanseringsalgoritmer används för att bestämma vilken server i backend varje anslutning skickas till. Här är några av de användbara alternativen:

  • Rounddrobin: Varje server används i tur och ordning efter dess vikt. Detta är den smidigaste och mest rättvisa algoritmen när bearbetningstiden för servrarna förblir jämnt fördelad. Denna algoritm är dynamisk, vilket gör att serverns vikt kan justeras i farten.
  • Leastconn: servern med minst anslutningar är vald. Round robin utförs mellan servrar med samma belastning. Att använda denna algoritm rekommenderas för långa sessioner som LDAP, SQL, TSE, etc., men den är inte särskilt lämplig för korta sessioner som HTTP.
  • Först: Den första servern med tillgängliga anslutningsplatser tar emot anslutningen. Servrar väljs från det lägsta numeriska ID:t till det högsta, vilket som standard är serverns position i farmen. När en server når maxconn används nästa server.
  • Källa: Käll-IP-adressen hashas och divideras med den totala vikten av körande servrar för att avgöra vilken server som kommer att ta emot begäran. På så sätt kommer samma klient-IP-adress alltid att gå till samma server, medan servrarna förblir desamma.

Ställa in lastbalansering på applikationsnivå (lager 7)

Ett annat tillgängligt alternativ är att konfigurera en lastbalanserare för att köras i applikationslagret (lager 7), vilket är användbart när delar av din webbapplikation finns på olika värdar. Detta kan uppnås genom att strypa överföringen av anslutningen, till exempel genom URL.

Öppna HAProxy-konfigurationsfilen med en textredigerare:

sudo vi /etc/haproxy/haproxy.cfg

Konfigurera sedan frontend- och backendsegmenten enligt exemplet nedan:

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 deklarerar en ACL-regel som heter url_blog som gäller för alla anslutningar med sökvägar som börjar med /blog. Use_backend anger att anslutningar som matchar url_blog-villkoret ska betjänas av en backend som heter blog_back, och alla andra förfrågningar hanteras av standardbackend.

På backend-sidan sätter konfigurationen upp två grupper av servrar: http_back, som tidigare, och en ny som heter blog_back, som hanterar anslutningar till example.com/blog.

När du har ändrat inställningarna, spara filen och starta om HAProxy med följande kommando:

sudo systemctl restart haproxy

Om du får några varningar eller felmeddelanden under start, kontrollera din konfiguration för dem och se till att du har skapat alla nödvändiga filer och mappar, försök sedan starta om igen.

Testar inställningen

När HAProxy har konfigurerats och körs, öppna den offentliga IP-adressen för belastningsbalansservern i en webbläsare och kontrollera om du är ansluten till backend korrekt. Statistik uri-parametern i konfigurationen skapar en statistiksida på den angivna adressen.

http://load_balancer_public_ip/haproxy?stats

När du laddar statistiksidan, om alla dina servrar visar grönt, så lyckades installationen!

Installera HAProxy load balancer på CentOS

Statistiksidan innehåller en del användbar information för att spåra dina webbhotell, inklusive upp/nedtid och antal sessioner. Om servern är rödmarkerad, se till att servern är påslagen och att du kan pinga den från lastbalanseringsmaskinen.

Om din lastbalanserare inte svarar, se till att HTTP-anslutningar inte blockeras av en brandvägg. Se också till att HAProxy fungerar med kommandot nedan:

sudo systemctl status haproxy

Skydda statistiksidan med ett lösenord

Men om statistiksidan bara är listad på frontend, är den öppen för alla att se, vilket kanske inte är en bra idé. Istället kan du tilldela den ett anpassat portnummer genom att lägga till exemplet nedan i slutet av filen haproxy.cfg. Byta ut Användarnamn и Lösenord för något säkert:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Efter att ha lagt till en ny lyssnargrupp, ta bort den gamla statistik-uri-länken från frontend-gruppen. När du är klar, spara filen och starta om HAProxy.

sudo systemctl restart haproxy

Öppna sedan lastbalanseraren igen med det nya portnumret och logga in med det användarnamn och lösenord du angav i konfigurationsfilen.

http://load_balancer_public_ip:8181

Se till att alla dina servrar fortfarande visar grönt och öppna sedan bara lastbalanserarens IP utan några portnummer i din webbläsare.

http://load_balancer_public_ip/

Om du har åtminstone en mängd olika målsidor på dina back-end-servrar, kommer du att märka att varje gång du laddar om sidan får du ett svar från en annan värd. Du kan prova olika balanseringsalgoritmer i konfigurationssektionen eller checka ut fullständig dokumentation.

Slutsats: HAProxy Load Balancer

Grattis till att du lyckats konfigurera din HAProxy-lastbalanserare! Även med en grundläggande belastningsbalansering kan du förbättra prestanda och tillgänglighet avsevärt för din webbapplikation. Den här guiden är bara en introduktion till lastbalansering med HAProxy, som kan mycket mer än vad som kan tas upp i snabbinställningsguiden. Vi rekommenderar att du experimenterar med olika konfigurationer med hjälp av omfattande dokumentation, tillgänglig för HAProxy, och börja sedan planera lastbalansering för din produktionsmiljö.

Genom att använda flera värdar för att skydda din webbtjänst med utrymme, kan själva lastbalanseraren fortfarande utgöra ett misslyckande. Du kan ytterligare förbättra hög tillgänglighet genom att installera en flytande IP mellan flera lastbalanserare. Du kan ta reda på mer om detta i vår artikel om flytande IP-adresser på UpCloud.

Mer om kursen "Linux-administratör. Virtualisering och klustring"***

Källa: will.com

Lägg en kommentar