HAProxy begyndervejledning

Haproxy Begyndervejledning



Efterhånden som din applikation skaleres, opstår behovet for at tilføje flere servere for at håndtere mere trafik. Jo mere trafik din applikation modtager, jo større er chancerne for at stå over for nedetiden, når serveren overbelastes. Der er dog værktøjer såsom HAProxy, der giver dig mulighed for at definere, hvordan trafikken håndteres for at balancere belastningen på din server. Ideen er at sikre, at ingen server bliver overbelastet. High Availability Proxy er en open source-software, der er designet til at tilbyde en pålidelig belastningsbalancering, mens den fungerer som en omvendt proxy for TCP/HTTP-applikationer.

HAProxy arbejder på at reducere overbelastning af enhver server, og den opnår dette ved at distribuere en trafik for at sikre, at ingen server overbelaster, men andre servere er tilgængelige. En platform som Instagram har en massiv trafik på grund af de anmodninger, der sendes i sekundet, og derfor er det nødvendigt at bruge HAProxy til at definere frontend, backend og lyttere for serverne for at undgå overbelastning.

Hvorfor bruge HAProxy

Før du lærer om installationen og konfigurationen af ​​HAProxy, bør du forstå, hvorfor vi har brug for det, takket være de funktioner, det tilbyder. Følgende er de primære egenskaber ved HAProxy:







  1. Lastbalancering – Med HAProxy kan du nemt fordele trafikken på tværs af forskellige servere for at undgå at overbelaste en enkelt server. På den måde vil din applikation ikke stå over for problemer med nedetid, og du vil have opnået hurtigere reaktionsevne, pålidelighed og tilgængelighed.
  2. Logning og overvågning – Du vil få detaljerede overvågningslogfiler til dine servere for at hjælpe med fejlfinding af problemer. Derudover har HAProxy en statistikside, hvor du kan få real-time præstationsanalyse for din load balancer.
  3. Sundhedstjek – Selv dine servere kræver et sundhedstjek for at bestemme deres status. HAProxy kører ofte sundhedstjek for at kende status på din server for at øge dens pålidelighed. Hvis en usund server bliver opdaget, omdirigerer den trafikken til en anden server.
  4. Omvendt proxy – En måde at øge sikkerheden på er ved at skjule den interne struktur. Heldigvis lader HAProxy dig modtage trafikken fra klienter og dirigere dem til passende servere. På den måde er din interne struktur skjult for hackerens øje.
  5. ACL'er (Adgangskontrollister) – Med HAProxy kan du definere, hvordan trafikdirigeringen skal foregå ved hjælp af forskellige kriterier såsom stier, overskrifter og IP-adresser. Derfor bliver det nemmere at definere en brugerdefineret routinglogik for din trafik.
  6. SSL-opsigelse – Som standard aflastes SSL/TLS af backend-serverne, hvilket forårsager en reduceret ydeevne. Men med HAProxy sker SSL/TLS-afslutningen ved belastningsbalanceren, hvilket aflaster opgaven i backend-serverne.

Installation af HAProxy

Indtil videre har vi defineret, hvad HAProxy er og diskuteret de funktioner, det tilbyder for at hjælpe dig med at forstå, hvorfor du har brug for det til din applikation. Det næste trin er at forstå, hvordan du kommer i gang ved at installere det på dit system.



Hvis du kører Ubuntu- eller Debian-systemerne, kan HAProxy installeres fra APT-pakkehåndteringen. Kør følgende kommando:



$ sudo apt opdatering
$ sudo apt installere haproxy

På samme måde, hvis du bruger de RHEL-baserede systemer eller CentOS, er HAProxy tilgængelig fra 'yum'-pakkehåndteringen. Kør følgende kommandoer:





$ sudo yum opdatering
$ sudo yum installer haproxy

I vores tilfælde bruger vi Ubuntu. Derfor har vi vores kommando som følger:



Vi kan derefter tjekke dens version for at sikre, at det lykkedes os at installere HAProxy med succes.

$ haproxy --version

Sådan konfigureres HAProxy

Med HAProxy installeret kan du nu åbne dens konfigurationsfil ( / etc/haproxy/haproxy.cfg) og definere de indstillinger, du ønsker at bruge til din load balancer.

Åbn konfigurationsfilen ved hjælp af en editor såsom nano eller vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Du får en konfigurationsfil som den i følgende:

Fra konfigurationsfilen vil du bemærke, at den kommer med to hovedsektioner:

  1. global - Det er den første sektion i filen, og dens værdier bør ikke ændres. Den indeholder procesindstillingerne, der definerer, hvordan HAProxy virker. For eksempel definerer den logningsdetaljerne og grupper eller brugere, der kan udføre HAProxy-funktionerne. Bemærk, at i denne konfigurationsfil kan du kun have én global sektion, og dens værdier bør forblive uændrede.
  1. standardindstillinger – Dette afsnit indeholder standardværdierne for noderne. For eksempel kan du tilføje timeouts eller driftstilstand for din HAProxy i dette afsnit. Desuden er det muligt at have adskillige standardsektioner i din HAProxy-konfigurationsfil.

Her er et eksempel på en 'Standard'-sektion:

I det givne billede definerer tilstanden, hvordan din HAProxy vil håndtere de indkommende anmodninger. Du kan indstille tilstanden til HTTP eller TCP. Med hensyn til timeout angiver den, hvor længe HAProxy skal vente. For eksempel er timeout-forbindelsen den tid, der skal ventes, før der oprettes en backend-forbindelse. Timeout-klienten er, hvor længe HAProxy skal vente på, at en klient sender dataene. Timeout-serveren er den tid, der skal vente på, at den relevante server sender de data, som vil blive videresendt til klienten. Hvordan du definerer standardværdierne, betyder meget for at forbedre responstiden for din ansøgning.

Der er yderligere tre sektioner, som du bør definere, for at din load balancer fungerer som forventet.

  1. frontend – Dette afsnit indeholder de IP-adresser, som du ønsker, at dine klienter skal bruge til at etablere forbindelsen.
  2. bagende - Det viser de serverpuljer, der håndterer anmodningerne som defineret i frontend-sektionen.
  3. Hør efter - Det bruges successivt, når du ønsker at rute en bestemt servergruppe. Dette afsnit kombinerer opgaverne for frontend og backend.

Lad os få et eksempel

For dette eksempel definerer vi frontenden til at bruge den lokale vært med en specifik port. Dernæst binder vi det med backend, som kører localhosten og kører derefter en Python-server for at teste, om alt fungerer som forventet for belastningsbalanceringen. Følg de givne trin.

Trin 1: Konfiguration af standardafsnittet

I afsnittet 'Standarder' indstiller vi de værdier, der skal deles på tværs af noderne. I vores tilfælde indstiller vi tilstanden til HTTP og indstiller timeouts for klienten og serveren. Du kan justere tiden, så den passer til dine behov.

Husk, at alle disse redigeringer er i HAProxy-konfigurationen placeret på '/etc/haproxy/haproxy.cfg'. Når standardafsnittet er konfigureret, lad os definere frontend.

Trin 2: Konfiguration af frontend-sektionen

I frontend-sektionen definerer vi, hvordan vi ønsker, at applikationen eller webstedet skal tilgås af kunder online. Vi giver IP-adresserne til applikationen. Men i dette tilfælde arbejder vi med den lokale vært. Derfor er vores IP-adresse reserveadressen på 127.0.0.1, og vi ønsker at acceptere forbindelserne via port 80.

Du skal tilføje nøgleordet 'bind', som fungerer som lytteren for IP-adressen på den angivne port. IP-adressen og porten, som du definerer, er, hvad belastningsbalanceren bruger til at acceptere de indkommende anmodninger.

Efter at have tilføjet de foregående linjer i din konfigurationsfil, skal vi genstarte 'haproxy.service' med følgende kommando:

$ sudo systemctl genstart haproxy

På dette tidspunkt kan vi prøve at sende anmodningerne til vores hjemmeside ved hjælp af 'curl'-kommandoen. Kør kommandoen og tilføj mål-IP-adressen.

$ curl

Da vi endnu ikke har defineret, hvordan backend af vores HAProxy vil være, får vi en 503 fejl som vist i det følgende. Selvom belastningsbalanceren formåede at modtage anmodningerne, er der i øjeblikket ingen server tilgængelig til at håndtere det, derfor fejlen.

Trin 3: Konfiguration af backend

Backend-sektionen er, hvor vi definerer de servere, der skal håndtere alle indkommende anmodninger. Belastningsbalanceren henviser til dette afsnit for at vide, hvordan den skal distribuere de indgående anmodninger for at sikre, at ingen server bliver overbelastet.

503-fejlen, som vi fik tidligere, skyldtes, at vi ikke havde nogen backend til at håndtere anmodningerne. Lad os begynde med at definere 'default_backend' til at håndtere anmodningerne. Du definerer det i frontend-sektionen. Vi kaldte det 'linux_backend' for denne sag.

Derefter skal du oprette en backend-sektion, der har samme navn som den, der er defineret i frontend-sektionen. Du skal derefter bruge nøgleordet 'server' efterfulgt af navnet på din server og dens IP-adresse. Følgende billede viser, at vi definerede 'linuxhint1'-serveren ved hjælp af IP 127.0.0.1 og port 8001:

Du kan have en pulje af backend-servere, men vi har kun defineret én til dette tilfælde. Sørg for at gemme filen. Vi skal igen genstarte HAProxy-tjenesten.

For at teste den oprettede HAProxy load balancer opretter vi en webserver ved hjælp af Python3 til at binde backend-portene ved hjælp af den IP-adresse, vi har angivet. Vi kører kommandoen som følger:

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

Sørg for, at du erstatter værdierne, så de matcher din IP-adresse og den port, du ønsker at binde. Læg mærke til, hvordan webserveren bliver oprettet og lytter efter eventuelle indkommende anmodninger.

På en anden terminal, lad os bruge 'curl'-kommandoen til at sende en anmodning til serveren.

$ curl

I modsætning til hvordan vi fik 503-fejlen tidligere, som viser, at ingen server er tilgængelig til at håndtere anmodningen, får vi denne gang et output, som bekræfter, at vores HAProxy load balancer virker.

Hvis du går tilbage til den forrige terminal, hvor vi oprettede webserveren, vil du se, at vi får et succesoutput 200, som bekræfter, at HAProxy har modtaget anmodningen og håndteret den ved at sende den til den definerede server i vores backend-sektion.

Sådan kan du indstille en simpel HAProxy til dit websted eller din applikation.

Arbejde med regler

Før vi slutter af med denne HAProxy-tutorial for begyndere, lad os hurtigt tale om, hvordan du kan definere reglerne for at guide, hvordan anmodningerne vil blive håndteret af belastningsbalanceren.

Efter de samme trin som før, lad os lade vores standardsektion være intakt og definere forskellige IP-adresser i frontend-sektionen. Vi binder den samme IP-adresse, men accepterer forbindelserne fra forskellige porte.

Desuden har vi vores 'default_backend' og en anden 'use_backend', som er en anden pulje af servere, som vi vil bruge afhængigt af den port, hvor anmodningerne kommer fra. I den følgende konfiguration håndteres alle anmodninger via port 81 af serverne i 'Linux2_backend'. Alle andre anmodninger håndteres af 'default_backend'.

Vi opretter derefter backend-sektionerne som defineret i frontend. Bemærk, at for hver backend har vi en anden server, som vi angiver at bruge til at håndtere anmodningerne.

Genstart hurtigt HAProxy-tjenesten.

Lad os oprette webserveren ved hjælp af Python3 og binde anmodningerne på port 8002, som er den alternative backend-server.

Når vi sender anmodninger til den, angiver vi porten som 81 for at udløse belastningsbalanceren til at sende anmodningerne til den alternative server, som ikke er standardserveren.

Ved at tjekke vores webserver igen, kan vi se, at den formår at modtage og håndtere anmodningerne og giver et 200 (succes) svar.

Det er sådan, du kan definere reglerne for at guide, hvordan din load balancer vil modtage og håndtere anmodningerne.

Konklusion

HAProxy er en ideel løsning til belastningsbalancering til TCP/HTTP-applikationer. Når den er installeret, kan du nemt redigere konfigurationsfilen for at definere standard-, frontend- og backend-sektionerne for at guide, hvordan din load balancer vil fungere. Dette indlæg er en begynderguide til HAProxy. Det begyndte med at definere HAProxy og dets funktioner. Dernæst gravede den ind i at forstå, hvordan man konfigurerer HAProxy og afsluttede med at give et eksempel på, hvordan man bruger HAProxy som en belastningsbalancer.