HAProxy nybörjarhandledning

Haproxy Nyborjarhandledning



När din applikation skalas uppstår behovet av att lägga till fler servrar för att hantera mer trafik. Ju mer trafik din applikation får, desto större är chansen att möta driftstopp när servern överbelastas. Det finns dock verktyg som HAProxy som låter dig definiera hur trafiken ska hanteras för att balansera belastningen på din server. Tanken är att se till att ingen server blir överbelastad. High Availability Proxy är en öppen källkodsprogramvara som är utformad för att erbjuda en pålitlig lastbalansering samtidigt som den fungerar som en omvänd proxy för TCP/HTTP-applikationer.

HAProxy arbetar för att minska överbelastning av alla servrar, och det uppnår detta genom att distribuera en trafik för att säkerställa att ingen server överbelastas, men andra servrar är tillgängliga. En plattform som Instagram har en massiv trafik på grund av de förfrågningar som skickas per sekund, därav behovet av att använda HAProxy för att definiera frontend, backend och lyssnare för servrarna för att undvika överbelastning.

Varför använda HAProxy

Innan du lär dig om installationen och konfigurationen av HAProxy bör du förstå varför vi behöver det, tack vare funktionerna det erbjuder. Följande är de primära egenskaperna hos HAProxy:







  1. Lastbalansering - Med HAProxy kan du enkelt fördela trafiken över olika servrar för att undvika att överbelasta en enskild server. På så sätt kommer din applikation inte att möta några problem med stillestånd, och du kommer att ha uppnått snabbare respons, tillförlitlighet och tillgänglighet.
  2. Loggning och övervakning – Du kommer att få detaljerade övervakningsloggar för dina servrar för att hjälpa dig med felsökning av problem. Dessutom har HAProxy en statistiksida där du kan få prestandaanalys i realtid för din lastbalanserare.
  3. Hälsokontroller – Även dina servrar kräver en hälsokontroll för att fastställa deras status. HAProxy kör ofta hälsokontrollerna för att veta statusen för din server för att förbättra dess tillförlitlighet. Om en ohälsosam server upptäcks, dirigerar den om trafiken till en annan server.
  4. Omvänd proxy – Ett sätt att öka säkerheten är att dölja den interna strukturen. Lyckligtvis låter HAProxy dig ta emot trafiken från klienter och dirigera dem till lämpliga servrar. På så sätt döljs din interna struktur för hackarens öga.
  5. ACLs (Access Control Lists) – Med HAProxy kan du definiera hur trafikdirigeringen ska ske med hjälp av olika kriterier som sökvägar, rubriker och IP-adresser. Därför blir det lättare att definiera en anpassad routinglogik för din trafik.
  6. SSL-uppsägning – Som standard laddas SSL/TLS av av backend-servrarna vilket orsakar en minskad prestanda. Men med HAProxy sker SSL/TLS-avslutningen vid lastbalanseraren, vilket avlastar uppgiften i backend-servrarna.

Installerar HAProxy

Hittills har vi definierat vad HAProxy är och diskuterat de funktioner som den erbjuder för att hjälpa dig förstå varför du behöver den för din applikation. Nästa steg är att förstå hur du kommer igång genom att installera det på ditt system.



Om du kör Ubuntu- eller Debian-systemen kan HAProxy installeras från APT-pakethanteraren. Kör följande kommando:



$ sudo apt uppdatering
$ sudo apt installera haproxy

På liknande sätt, om du använder de RHEL-baserade systemen eller CentOS, är HAProxy tillgängligt från 'yum'-pakethanteraren. Kör följande kommandon:





$ sudo yum uppdatering
$ sudo yum installera haproxy

I vårt fall använder vi Ubuntu. Därför har vi vårt kommando enligt följande:



Vi kan sedan kontrollera dess version för att säkerställa att vi lyckades installera HAProxy framgångsrikt.

$ haproxy --version

Hur man konfigurerar HAProxy

Med HAProxy installerat kan du nu öppna dess konfigurationsfil ( / etc/haproxy/haproxy.cfg) och definiera inställningarna som du vill använda för din lastbalanserare.

Öppna konfigurationsfilen med en redigerare som nano eller vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Du får en konfigurationsfil som den i följande:

Från konfigurationsfilen kommer du att märka att den kommer med två huvudsektioner:

  1. globalt – Det är den första delen i filen och dess värden bör inte ändras. Den innehåller processinställningarna som definierar hur HAProxy fungerar. Till exempel definierar den loggningsdetaljerna och grupperna eller användarna som kan utföra HAProxy-funktionerna. Observera att i den här konfigurationsfilen kan du bara ha en global sektion, och dess värden ska förbli oförändrade.
  1. standardvärden – Det här avsnittet innehåller standardvärdena för noderna. Du kan till exempel lägga till timeouts eller driftläge för din HAProxy i det här avsnittet. Dessutom är det möjligt att ha många standardsektioner i din HAProxy-konfigurationsfil.

Här är ett exempel på avsnittet 'Standarder':

I den givna bilden definierar läget hur din HAProxy kommer att hantera inkommande förfrågningar. Du kan ställa in läget på HTTP eller TCP. När det gäller timeout anger den hur länge HAProxy ska vänta. Till exempel är timeout-anslutningen tiden att vänta innan en backend-anslutning görs. Timeout-klienten är hur länge HAProxy ska vänta på att en klient ska skicka data. Timeoutservern är tiden för att vänta på att lämplig server ska skicka data som kommer att vidarebefordras till klienten. Hur du definierar standardvärdena har stor betydelse för att förbättra svarstiden för din ansökan.

Det finns ytterligare tre avsnitt som du bör definiera för att din lastbalanserare ska fungera som förväntat.

  1. frontend – Det här avsnittet innehåller de IP-adresser som du vill att dina klienter ska använda för att upprätta anslutningen.
  2. backend – Den visar serverpoolerna som hanterar förfrågningarna enligt definitionen i frontend-sektionen.
  3. lyssna - Den används successivt när du vill dirigera en specifik servergrupp. Det här avsnittet kombinerar uppgifterna för frontend och backend.

Låt oss ta ett exempel

För det här exemplet definierar vi gränssnittet för att använda localhost med en specifik port. Därefter binder vi den med backend som kör localhost och kör sedan en Python-server för att testa om allt fungerar som förväntat för lastbalanseringen. Följ de givna stegen.

Steg 1: Konfigurera avsnittet Defaults

I avsnittet 'Standarder' ställer vi in ​​värdena som ska delas mellan noderna. I vårt fall ställer vi in ​​läget på HTTP och ställer in timeouts för klienten och servern. Du kan anpassa tiden så att den passar dina behov.

Kom ihåg att alla dessa redigeringar finns i HAProxy-konfigurationen som finns på '/etc/haproxy/haproxy.cfg'. När standardavsnittet är konfigurerat, låt oss definiera gränssnittet.

Steg 2: Konfigurera gränssnittet

I frontend-sektionen definierar vi hur vi vill att applikationen eller webbplatsen ska nås av kunder online. Vi ger applikationens IP-adresser. Men i det här fallet arbetar vi med den lokala värden. Därför är vår IP-adress reservadressen för 127.0.0.1 och vi vill acceptera anslutningarna via port 80.

Du måste lägga till nyckelordet 'bind' som fungerar som lyssnare för IP-adressen på den angivna porten. IP-adressen och porten som du definierar är vad lastbalanseraren använder för att acceptera inkommande förfrågningar.

Efter att ha lagt till de föregående raderna i din konfigurationsfil måste vi starta om 'haproxy.service' med följande kommando:

$ sudo systemctl starta om haproxy

Vid det här laget kan vi försöka skicka förfrågningarna till vår webbplats med kommandot 'curl'. Kör kommandot och lägg till mål-IP-adressen.

$ curl

Eftersom vi ännu inte har definierat hur backend av vår HAProxy kommer att bli, får vi ett 503-fel som visas i följande. Även om belastningsutjämnaren lyckades ta emot förfrågningarna, finns för närvarande ingen server tillgänglig för att hantera det, därav felet.

Steg 3: Konfigurera backend

Backend-sektionen är där vi definierar servrarna som kommer att hantera alla inkommande förfrågningar. Lastbalanseraren hänvisar till det här avsnittet för att veta hur den ska distribuera inkommande förfrågningar för att säkerställa att ingen server blir överbelastad.

503-felet som vi fick tidigare berodde på att vi inte hade någon backend för att hantera förfrågningarna. Låt oss börja med att definiera 'default_backend' för att hantera förfrågningarna. Du definierar det i frontend-sektionen. Vi döpte det till 'linux_backend' för det här fallet.

Skapa sedan en backend-sektion som har samma namn som den som är definierad i frontend-sektionen. Du måste sedan använda nyckelordet 'server' följt av namnet på din server och dess IP-adress. Följande bild visar att vi definierade 'linuxhint1'-servern med IP 127.0.0.1 och port 8001:

Du kan ha en pool av backend-servrar, men vi definierade bara en för det här fallet. Se till att du sparar filen. Vi måste starta om HAProxy-tjänsten igen.

För att testa den skapade HAProxy-lastbalanseraren skapar vi en webbserver med Python3 för att binda backend-portarna med den IP-adress som vi angav. Vi kör kommandot enligt följande:

$ python3 -m http.server 8001 --bind 127.0.0.1

Se till att du byter ut värdena så att de matchar din IP-adress och porten som du vill binda. Lägg märke till hur webbservern skapas och lyssnar efter inkommande förfrågningar.

På en annan terminal, låt oss använda kommandot 'curl' för att skicka en förfrågan till servern.

$ curl

Till skillnad från hur vi fick 503-felet tidigare som visar att ingen server är tillgänglig för att hantera förfrågan, får vi en utdata denna gång som bekräftar att vår HAProxy-lastbalanserare fungerar.

Om du går tillbaka till den tidigare terminalen där vi skapade webbservern kommer du att se att vi får en framgångsutgång 200 som bekräftar att HAProxy tagit emot förfrågan och hanterat den genom att skicka den till den definierade servern i vår backend-sektion.

Det är så du kan ställa in en enkel HAProxy för din webbplats eller applikation.

Arbeta med regler

Innan vi avslutar denna HAProxy-handledning för nybörjare, låt oss snabbt prata om hur du kan definiera reglerna för att vägleda hur förfrågningarna kommer att hanteras av lastbalanseraren.

Genom att följa samma steg som tidigare, låt oss lämna vår standardsektion intakt och definiera olika IP-adresser i frontend-sektionen. Vi binder samma IP-adress men accepterar anslutningarna från olika portar.

Dessutom har vi vår 'default_backend' och en annan 'use_backend' som är en annan pool av servrar som vi kommer att använda beroende på porten varifrån förfrågningarna kommer. I följande konfiguration hanteras alla förfrågningar via port 81 av servrarna i 'Linux2_backend'. Alla andra förfrågningar hanteras av 'default_backend'.

Vi skapar sedan backend-sektionerna enligt definitionen i frontend. Observera att för varje backend har vi en annan server som vi anger att använda för att hantera förfrågningarna.

Starta om HAProxy-tjänsten snabbt.

Låt oss skapa webbservern med Python3 och binda förfrågningarna på port 8002 som är den alternativa backend-servern.

När vi skickar förfrågningar till den anger vi porten som 81 för att trigga lastbalanseraren för att skicka förfrågningarna till den alternativa servern som inte är standardservern.

När vi kontrollerar vår webbserver igen kan vi se att den lyckas ta emot och hantera förfrågningarna och ger ett 200 (framgångs)svar.

Det är så du kan definiera reglerna för att vägleda hur din lastbalanserare tar emot och hanterar förfrågningarna.

Slutsats

HAProxy är en idealisk lösning för lastbalansering för TCP/HTTP-applikationer. När den väl har installerats kan du bekvämt redigera konfigurationsfilen för att definiera sektionerna för standardinställningar, frontend och backend för att vägleda hur din lastbalanserare kommer att fungera. Det här inlägget är en nybörjarguide till HAProxy. Det började med att definiera HAProxy och dess funktioner. Därefter grävde det i förståelse för hur man konfigurerar HAProxy och avslutade med att ge ett exempel på hur man använder HAProxy som en lastbalanserare.