HAProxy nybegynneropplæring

Haproxy Nybegynneropplaering



Etter hvert som applikasjonen din skaleres, dukker det opp behovet for å legge til flere servere for å håndtere mer trafikk. Jo mer trafikk applikasjonen din mottar, desto større er sjansene for nedetid når serveren overbelastes. Imidlertid er det verktøy som HAProxy som lar deg definere hvordan trafikken skal håndteres for å balansere belastningen på serveren din. Tanken er å sikre at ingen server blir overbelastet. High Availability Proxy er en åpen kildekode-programvare som er designet for å tilby en pålitelig lastbalansering samtidig som den fungerer som en omvendt proxy for TCP/HTTP-applikasjoner.

HAProxy jobber for å redusere overbelastning av enhver server, og den oppnår dette ved å distribuere en trafikk for å sikre at ingen server overbelaster, men andre servere er tilgjengelige. En plattform som Instagram har en massiv trafikk på grunn av forespørslene som sendes per sekund, derav behovet for å bruke HAProxy for å definere frontend, backend og lyttere for serverne for å unngå overbelastning.

Hvorfor bruke HAProxy

Før du lærer om installasjonen og konfigurasjonen av HAProxy, bør du forstå hvorfor vi trenger det, takket være funksjonene den tilbyr. Følgende er hovedtrekkene til HAProxy:







  1. Lastbalansering - Med HAProxy kan du enkelt fordele trafikken på forskjellige servere for å unngå overbelastning av en enkelt server. På den måten vil applikasjonen din ikke møte noen nedetidsproblemer, og du vil ha oppnådd raskere respons, pålitelighet og tilgjengelighet.
  2. Logging og overvåking – Du vil få detaljerte overvåkingslogger for serverne dine for å hjelpe deg med feilsøking av problemer. Dessuten har HAProxy en statistikkside der du kan få ytelsesanalyse i sanntid for lastbalanseren din.
  3. Helsesjekker – Selv serverne dine krever en helsesjekk for å fastslå statusen deres. HAProxy kjører ofte helsesjekkene for å vite statusen til serveren din for å øke påliteligheten. Hvis en usunn server blir oppdaget, omdirigerer den trafikken til en annen server.
  4. Omvendt proxy – En måte å øke sikkerheten på er å skjule den interne strukturen. Heldigvis lar HAProxy deg motta trafikk fra klienter og rute dem til passende servere. På den måten er den interne strukturen din skjult for hackerens øye.
  5. ACL-er (tilgangskontrolllister) – Med HAProxy kan du definere hvordan trafikkrutingen skal skje ved å bruke ulike kriterier som stier, overskrifter og IP-adresser. Dermed blir det enklere å definere en tilpasset rutelogikk for trafikken din.
  6. SSL-oppsigelse – Som standard blir SSL/TLS avlastet av backend-serverne, noe som forårsaker redusert ytelse. Med HAProxy skjer imidlertid SSL/TLS-avslutningen ved belastningsbalanseren, og laster av oppgaven i backend-serverne.

Installerer HAProxy

Så langt har vi definert hva HAProxy er og diskutert funksjonene den tilbyr for å hjelpe deg å forstå hvorfor du trenger det for applikasjonen din. Det neste trinnet er å forstå hvordan du kommer i gang ved å installere det på systemet ditt.



Hvis du kjører Ubuntu- eller Debian-systemene, kan HAProxy installeres fra APT-pakkebehandleren. Kjør følgende kommando:



$ sudo apt oppdatering
$ sudo apt installer haproxy

På samme måte, hvis du bruker de RHEL-baserte systemene eller CentOS, er HAProxy tilgjengelig fra 'yum'-pakkebehandleren. Kjør følgende kommandoer:





$ sudo yum oppdatering
$ sudo yum installer haproxy

I vårt tilfelle bruker vi Ubuntu. Dermed har vi vår kommando som følger:



Vi kan deretter sjekke versjonen for å finne ut at vi klarte å installere HAProxy vellykket.

$ haproxy --versjon

Hvordan konfigurere HAProxy

Med HAProxy installert kan du nå åpne konfigurasjonsfilen ( / etc/haproxy/haproxy.cfg) og definer innstillingene du ønsker å bruke for lastbalanseren.

Åpne konfigurasjonsfilen ved hjelp av en editor som nano eller vim.

$ sudo nano /etc/haproxy/haproxy.cfg

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

Fra konfigurasjonsfilen vil du legge merke til at den kommer med to hovedseksjoner:

  1. globalt – Det er den første delen i filen og verdiene bør ikke endres. Den inneholder prosessinnstillingene som definerer hvordan HAProxy fungerer. For eksempel definerer den loggingsdetaljene og gruppene eller brukerne som kan utføre HAProxy-funksjonene. Merk at i denne konfigurasjonsfilen kan du bare ha én global seksjon, og verdiene skal forbli uendret.
  1. standarder – Denne delen inneholder standardverdiene for nodene. Du kan for eksempel legge til tidsavbrudd eller driftsmodus for din HAProxy i denne delen. Dessuten er det mulig å ha mange standardseksjoner i HAProxy-konfigurasjonsfilen.

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

I det gitte bildet definerer modusen hvordan din HAProxy skal håndtere innkommende forespørsler. Du kan sette modusen til HTTP eller TCP. Når det gjelder tidsavbruddet, spesifiserer den hvor lenge HAProxy skal vente. For eksempel er tidsavbruddstilkoblingen tiden det skal vente før en backend-tilkobling opprettes. Tidsavbruddsklienten er hvor lenge HAProxy skal vente på at en klient skal sende dataene. Tidsavbruddsserveren er tiden for å vente på at den riktige serveren sender dataene som skal videresendes til klienten. Hvordan du definerer standardverdiene betyr mye for å forbedre responstiden til søknaden din.

Det er tre andre seksjoner du bør definere for at lastbalanseren skal fungere som forventet.

  1. frontend – Denne delen inneholder IP-adressene som du ønsker at klientene dine skal bruke for å opprette forbindelsen.
  2. baksiden - Den viser serverpoolene som håndterer forespørslene som definert i frontend-delen.
  3. lytte - Den brukes i rekkefølge når du ønsker å rute en bestemt servergruppe. Denne delen kombinerer oppgavene til frontend og backend.

La oss ha et eksempel

For dette eksemplet definerer vi grensesnittet for å bruke den lokale verten med en spesifikk port. Deretter binder vi den med backend som kjører localhost og kjører deretter en Python-server for å teste om alt fungerer som forventet for lastbalansering. Følg de angitte trinnene.

Trinn 1: Konfigurering av standarddelen

I delen 'Standarder' angir vi verdiene som skal deles på tvers av nodene. For vårt tilfelle setter vi modusen til HTTP og angir tidsavbrudd for klienten og serveren. Du kan justere tiden for å passe dine behov.

Husk at alle disse redigeringene er i HAProxy-konfigurasjonen som ligger på '/etc/haproxy/haproxy.cfg'. Når standarddelen er konfigurert, la oss definere grensesnittet.

Trinn 2: Konfigurering av grensesnittdelen

I frontend-delen definerer vi hvordan vi vil at applikasjonen eller nettstedet skal få tilgang til kunder online. Vi oppgir IP-adressene for applikasjonen. Men for dette tilfellet jobber vi med den lokale verten. Derfor er IP-adressen vår reserveadressen til 127.0.0.1, og vi ønsker å godta tilkoblingene via port 80.

Du må legge til nøkkelordet 'bind' som fungerer som lytteren for IP-adressen på den angitte porten. IP-adressen og porten du definerer er det lastbalanseren bruker for å akseptere innkommende forespørsler.

Etter å ha lagt til de forrige linjene i konfigurasjonsfilen din, må vi starte 'haproxy.service' på nytt med følgende kommando:

$ sudo systemctl start haproxy på nytt

På dette tidspunktet kan vi prøve å sende forespørslene til nettstedet vårt ved å bruke 'curl'-kommandoen. Kjør kommandoen og legg til mål-IP-adressen.

$ curl

Siden vi ennå ikke har defineret hvordan backend av vår HAProxy vil være, får vi en 503-feil som vist i det følgende. Selv om lastbalanseren klarte å motta forespørslene, er det for øyeblikket ingen server tilgjengelig for å håndtere det, derav feilen.

Trinn 3: Konfigurere Backend

Backend-delen er der vi definerer serverne som skal håndtere alle innkommende forespørsler. Lastbalanseren refererer til denne delen for å vite hvordan den skal distribuere innkommende forespørsler for å sikre at ingen server blir overbelastet.

503-feilen vi fikk tidligere var fordi vi ikke hadde noen backend for å håndtere forespørslene. La oss begynne med å definere 'default_backend' for å håndtere forespørslene. Du definerer det i frontend-delen. Vi kalte det 'linux_backend' for denne saken.

Deretter oppretter du en backend-seksjon som har samme navn som den som er definert i frontend-seksjonen. Du må da bruke nøkkelordet 'server' etterfulgt av navnet på serveren din og dens IP-adresse. Følgende bilde viser at vi definerte 'linuxhint1'-serveren ved å bruke IP 127.0.0.1 og port 8001:

Du kan ha en pool av backend-servere, men vi definerte bare én for dette tilfellet. Sørg for at du lagrer filen. Vi må starte HAProxy-tjenesten på nytt.

For å teste den opprettede HAProxy-lastbalanseren oppretter vi en webserver ved hjelp av Python3 for å binde backend-portene ved å bruke IP-adressen som vi spesifiserte. Vi kjører kommandoen som følger:

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

Sørg for at du erstatter verdiene for å matche IP-adressen din og porten du ønsker å binde. Legg merke til hvordan webserveren blir opprettet og lytter etter eventuelle innkommende forespørsler.

På en annen terminal, la oss bruke 'curl'-kommandoen for å sende en forespørsel til serveren.

$ curl

I motsetning til hvordan vi fikk 503-feilen tidligere som viser at ingen server er tilgjengelig for å håndtere forespørselen, får vi en utgang denne gangen som bekrefter at HAProxy-lastbalanseren vår fungerer.

Hvis du går tilbake til forrige terminal der vi opprettet webserveren, vil du se at vi får en suksessutgang 200 som bekrefter at HAProxy mottok forespørselen og behandlet den ved å sende den til den definerte serveren i vår backend-seksjon.

Slik kan du angi en enkel HAProxy for nettstedet eller applikasjonen din.

Arbeid med regler

Før vi avslutter denne HAProxy-opplæringen for nybegynnere, la oss raskt snakke om hvordan du kan definere reglene for å veilede hvordan forespørslene vil bli håndtert av lastbalanseren.

Følg de samme trinnene som før, la oss la standarddelen være intakt og definere forskjellige IP-adresser i frontend-delen. Vi binder den samme IP-adressen, men godtar tilkoblingene fra forskjellige porter.

Dessuten har vi vår 'default_backend' og en annen 'use_backend' som er en annen servergruppe som vi vil bruke avhengig av porten der forespørslene kommer fra. I den følgende konfigurasjonen håndteres alle forespørsler via port 81 av serverne i 'Linux2_backend'. Eventuelle andre forespørsler håndteres av 'default_backend'.

Vi lager deretter backend-seksjonene som definert i frontend. Merk at for hver backend har vi en annen server som vi spesifiserer å bruke for å håndtere forespørslene.

Start HAProxy-tjenesten raskt på nytt.

La oss lage webserveren ved å bruke Python3 og binde forespørslene på port 8002 som er den alternative backend-serveren.

Når vi sender forespørsler til den, spesifiserer vi porten som 81 for å utløse lastbalanseren for å sende forespørslene til den alternative serveren som ikke er standardserveren.

Ved å sjekke webserveren vår på nytt kan vi se at den klarer å motta og håndtere forespørslene og gir et 200 (suksess) svar.

Det er slik du kan definere reglene for å veilede hvordan lastbalanseren din vil motta og håndtere forespørslene.

Konklusjon

HAProxy er en ideell løsning for lastbalansering for TCP/HTTP-applikasjoner. Når den er installert, kan du enkelt redigere konfigurasjonsfilen for å definere standard-, frontend- og backend-seksjonene for å veilede hvordan lastbalanseren din vil fungere. Dette innlegget er en nybegynnerguide til HAProxy. Det begynte med å definere HAProxy og dets funksjoner. Deretter gravde det i å forstå hvordan man konfigurerer HAProxy og avsluttet med å gi et eksempel på hvordan man bruker HAProxy som en lastbalanser.