HAProxy beginnershandleiding

Haproxy Beginnershandleiding



Naarmate uw applicatie schaalt, ontstaat de noodzaak om meer servers toe te voegen om meer verkeer te kunnen verwerken. Hoe meer verkeer uw applicatie ontvangt, hoe groter de kans op downtime wanneer de server overbelast raakt. Er zijn echter tools zoals HAProxy waarmee u kunt definiëren hoe het verkeer wordt afgehandeld om de belasting op uw server in evenwicht te brengen. Het idee is om ervoor te zorgen dat geen enkele server overbelast raakt. High Availability Proxy is open-sourcesoftware die is ontworpen om een ​​betrouwbare taakverdeling te bieden en tegelijkertijd te fungeren als een reverse proxy voor TCP/HTTP-toepassingen.

HAProxy werkt om de overbelasting van elke server te verminderen, en bereikt dit door verkeer te distribueren om ervoor te zorgen dat er geen overbelasting van de server ontstaat, terwijl er toch andere servers beschikbaar zijn. Een platform zoals Instagram heeft enorm veel verkeer vanwege de verzoeken die per seconde worden verzonden. Vandaar de noodzaak om HAProxy te gebruiken om de frontend, backend en luisteraars voor de servers te definiëren om overbelasting te voorkomen.

Waarom HAProxy gebruiken

Voordat u meer te weten komt over de installatie en configuratie van HAProxy, moet u begrijpen waarom we het nodig hebben, dankzij de functies die het biedt. Dit zijn de belangrijkste kenmerken van HAProxy:







  1. Load-balancering – Met HAProxy kunt u het verkeer comfortabel over verschillende servers verdelen om overbelasting van één server te voorkomen. Op die manier krijgt uw applicatie geen problemen met downtime en profiteert u van een snellere respons, betrouwbaarheid en beschikbaarheid.
  2. Logboekregistratie en monitoring – U ontvangt gedetailleerde monitoringlogboeken voor uw servers om u te helpen bij het oplossen van problemen. Bovendien heeft HAProxy een statistiekenpagina waar u realtime prestatieanalyses voor uw load balancer kunt krijgen.
  3. Gezondheidchecks - Zelfs uw servers hebben een gezondheidscontrole nodig om hun status te bepalen. HAProxy voert regelmatig gezondheidscontroles uit om de status van uw server te kennen en zo de betrouwbaarheid ervan te vergroten. Als er een ongezonde server wordt gedetecteerd, wordt het verkeer omgeleid naar een andere server.
  4. Omgekeerde proxy – Eén manier om de veiligheid te vergroten is door de interne structuur te verbergen. Gelukkig kunt u met HAProxy het verkeer van clients ontvangen en naar de juiste servers leiden. Op die manier is uw interne structuur verborgen voor het oog van de hacker.
  5. ACL's (toegangscontrolelijsten) – Met HAProxy kunt u definiëren hoe de verkeersroutering moet plaatsvinden met behulp van verschillende criteria, zoals paden, headers en IP-adressen. Zo wordt het definiëren van een aangepaste routeringslogica voor uw verkeer eenvoudiger.
  6. SSL-beëindiging – Standaard wordt SSL/TLS ontlast door de backend-servers, wat verminderde prestaties veroorzaakt. Bij HAProxy vindt de SSL/TLS-beëindiging echter plaats bij de load balancer, waardoor de taak naar de backend-servers wordt verplaatst.

HAProxy installeren

Tot nu toe hebben we gedefinieerd wat HAProxy is en hebben we de functies besproken die het biedt, zodat u begrijpt waarom u het voor uw toepassing nodig heeft. De volgende stap is begrijpen hoe u aan de slag kunt gaan door het op uw systeem te installeren.



Als u de Ubuntu- of Debian-systemen gebruikt, kan HAProxy worden geïnstalleerd vanuit de APT-pakketbeheerder. Voer de volgende opdracht uit:



$ sudo apt-update
$ sudo apt install haproxy

Op dezelfde manier, als u de op RHEL gebaseerde systemen of CentOS gebruikt, is HAProxy beschikbaar via de “yum” pakketbeheerder. Voer de volgende opdrachten uit:





$ sudo yum-update
$ sudo yum installeer haproxy

In ons geval gebruiken we Ubuntu. We hebben dus ons commando als volgt:



Vervolgens kunnen we de versie ervan controleren om er zeker van te zijn dat we HAProxy met succes hebben geïnstalleerd.

$ haproxy --versie

Hoe HAProxy te configureren

Als HAProxy is geïnstalleerd, kunt u nu het configuratiebestand openen ( / etc/haproxy/haproxy.cfg) en definieer de instellingen die u voor uw load balancer wilt gebruiken.

Open het configuratiebestand met een editor zoals nano of vim.

$ sudo nano /etc/haproxy/haproxy.cfg

U krijgt een configuratiebestand zoals hieronder weergegeven:

Uit het configuratiebestand zul je merken dat het uit twee hoofdsecties bestaat:

  1. globaal - Het is de eerste sectie in het bestand en de waarden ervan mogen niet worden gewijzigd. Het bevat de procesinstellingen die bepalen hoe de HAProxy werkt. Het definieert bijvoorbeeld de loggegevens en groepen of gebruikers die de HAProxy-functies kunnen uitvoeren. Houd er rekening mee dat u in dit configuratiebestand slechts één globale sectie kunt hebben en dat de waarden ervan ongewijzigd moeten blijven.
  1. standaardwaarden – Deze sectie bevat de standaardwaarden voor de knooppunten. In deze sectie kunt u bijvoorbeeld de time-outs of de operationele modus voor uw HAProxy toevoegen. Bovendien is het mogelijk om talloze standaardsecties in uw HAProxy-configuratiebestand te hebben.

Hier is een voorbeeld van een sectie 'Standaardwaarden':

In de gegeven afbeelding definieert de modus hoe uw HAProxy de binnenkomende verzoeken zal afhandelen. U kunt de modus instellen op HTTP of TCP. Wat de time-out betreft, deze specificeert hoe lang HAProxy moet wachten. De time-outverbinding is bijvoorbeeld de tijd die moet worden gewacht voordat een backend-verbinding tot stand wordt gebracht. De time-outclient geeft aan hoe lang HAProxy moet wachten totdat een client de gegevens verzendt. De time-outserver is de tijd die nodig is om te wachten tot de juiste server de gegevens verzendt die naar de client worden doorgestuurd. Hoe u de standaardwaarden definieert, is van groot belang bij het verbeteren van de responstijd van uw toepassing.

Er zijn nog drie secties die u moet definiëren om ervoor te zorgen dat uw load balancer naar verwachting werkt.

  1. voorkant - Deze sectie bevat de IP-adressen die u door uw klanten wilt laten gebruiken om de verbinding tot stand te brengen.
  2. backend – Het toont de serverpools die de verzoeken afhandelen zoals gedefinieerd in de frontend-sectie.
  3. luisteren - Het wordt achtereenvolgens gebruikt wanneer u een specifieke servergroep wilt routeren. In deze sectie worden de taken van de frontend en backend gecombineerd.

Laten we een voorbeeld hebben

Voor dit voorbeeld definiëren we de frontend om de localhost met een specifieke poort te gebruiken. Vervolgens binden we het met de backend waarop de localhost draait en draaien vervolgens een Python-server om te testen of alles werkt zoals verwacht voor de taakverdeling. Volg de gegeven stappen.

Stap 1: Het configureren van de sectie Standaardinstellingen

In het gedeelte 'Standaardwaarden' stellen we de waarden in die over de knooppunten moeten worden gedeeld. In ons geval stellen we de modus in op HTTP en stellen we de time-outs in voor de client en de server. U kunt de tijd aanpassen aan uw behoeften.

Houd er rekening mee dat al deze bewerkingen zich in de HAProxy-configuratie bevinden, gelegen op “/etc/haproxy/haproxy.cfg”. Zodra de standaardinstellingensectie is geconfigureerd, gaan we de frontend definiëren.

Stap 2: De frontendsectie configureren

In het frontend-gedeelte definiëren we hoe we willen dat de applicatie of website online toegankelijk is voor klanten. Wij geven de IP-adressen voor de applicatie. Maar voor dit geval werken we met de localhost. Daarom is ons IP-adres het fallback-adres van 127.0.0.1 en willen we de verbindingen via poort 80 accepteren.

U moet het sleutelwoord “bind” toevoegen, dat fungeert als luisteraar voor het IP-adres op de opgegeven poort. Het IP-adres en de poort die u definieert, zijn wat de load balancer gebruikt om de binnenkomende verzoeken te accepteren.

Nadat we de vorige regels aan uw configuratiebestand hebben toegevoegd, moeten we “haproxy.service” opnieuw opstarten met het volgende commando:

$ sudo systemctl herstart haproxy

Op dit punt kunnen we proberen de verzoeken naar onze website te sturen met behulp van de opdracht “curl”. Voer de opdracht uit en voeg het doel-IP-adres toe.

$ curl

Omdat we nog moeten definiëren hoe de backend van onze HAProxy eruit zal zien, krijgen we een 503-foutmelding, zoals hieronder weergegeven. Hoewel de load balancer de verzoeken heeft ontvangen, is er momenteel geen server beschikbaar om deze af te handelen, vandaar de fout.

Stap 3: De backend configureren

In het backend-gedeelte definiëren we de servers die alle inkomende verzoeken zullen afhandelen. De load balancer raadpleegt deze sectie om te weten hoe hij de binnenkomende verzoeken moet verdelen om ervoor te zorgen dat geen enkele server overbelast raakt.

De 503-fout die we eerder kregen, kwam doordat we geen backend hadden om de verzoeken af ​​te handelen. Laten we beginnen met het definiëren van de “default_backend” om de verzoeken af ​​te handelen. Je definieert het in de frontend-sectie. We noemden het voor dit geval “linux_backend”.

Maak vervolgens een backend-sectie met dezelfde naam als degene die is gedefinieerd in de frontend-sectie. U moet dan het trefwoord “server” gebruiken, gevolgd door de naam van uw server en het IP-adres ervan. De volgende afbeelding laat zien dat we de “linuxhint1”-server hebben gedefinieerd met behulp van IP 127.0.0.1 en poort 8001:

U kunt over een pool van backend-servers beschikken, maar voor dit geval hebben we er slechts één gedefinieerd. Zorg ervoor dat u het bestand opslaat. We moeten de HAProxy-service opnieuw starten.

Om de gemaakte HAProxy-load balancer te testen, maken we een webserver met Python3 om de backend-poorten te binden met behulp van het IP-adres dat we hebben opgegeven. We voeren de opdracht als volgt uit:

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

Zorg ervoor dat u de waarden vervangt zodat deze overeenkomen met uw IP-adres en de poort die u wilt binden. Merk op hoe de webserver wordt gemaakt en luistert naar binnenkomende verzoeken.

Laten we op een andere terminal de opdracht “curl” gebruiken om een ​​verzoek naar de server te sturen.

$ curl

In tegenstelling tot hoe we eerder de 503-fout kregen, die aantoont dat er geen server beschikbaar is om het verzoek af te handelen, krijgen we deze keer een uitvoer die bevestigt dat onze HAProxy-load balancer werkt.

Als u teruggaat naar de vorige terminal waar we de webserver hebben gemaakt, ziet u dat we een succesuitvoer 200 krijgen die bevestigt dat HAProxy het verzoek heeft ontvangen en afgehandeld door het naar de gedefinieerde server in onze backend-sectie te sturen.

Zo kunt u een eenvoudige HAProxy instellen voor uw website of applicatie.

Werken met regels

Voordat we deze HAProxy-tutorial voor beginners afsluiten, laten we het snel hebben over hoe u de regels kunt definiëren om te bepalen hoe de verzoeken door de load balancer worden afgehandeld.

Laten we dezelfde stappen volgen als voorheen en laten we onze standaardsectie intact laten en verschillende IP-adressen definiëren in de frontendsectie. We binden hetzelfde IP-adres maar accepteren de verbindingen van verschillende poorten.

Bovendien hebben we onze “default_backend” en een andere “use_backend”, een andere pool van servers die we zullen gebruiken, afhankelijk van de poort waar de verzoeken vandaan komen. In de volgende configuratie worden alle verzoeken via poort 81 afgehandeld door de servers in de “Linux2_backend”. Alle andere verzoeken worden afgehandeld door de “default_backend”.

Vervolgens maken we de backend-secties zoals gedefinieerd in de frontend. Houd er rekening mee dat we voor elke backend een andere server hebben die we specificeren om te gebruiken voor het afhandelen van de verzoeken.

Start de HAProxy-service snel opnieuw.

Laten we de webserver maken met Python3 en de verzoeken binden op poort 8002, de alternatieve backend-server.

Wanneer we er verzoeken naartoe sturen, specificeren we de poort als 81 om de load balancer te activeren om de verzoeken naar de alternatieve server te sturen, die niet de standaardserver is.

Als we onze webserver opnieuw controleren, kunnen we zien dat deze erin slaagt de verzoeken te ontvangen en af ​​te handelen en een 200 (succes) antwoord geeft.

Zo kunt u de regels definiëren die bepalen hoe uw load balancer de verzoeken zal ontvangen en afhandelen.

Conclusie

HAProxy is een ideale oplossing voor taakverdeling voor TCP/HTTP-toepassingen. Eenmaal geïnstalleerd, kunt u het configuratiebestand gemakkelijk bewerken om de standaardinstellingen, frontend- en backend-secties te definiëren om te bepalen hoe uw load balancer zal werken. Dit bericht is een beginnershandleiding voor HAProxy. Het begon met het definiëren van HAProxy en de functies ervan. Vervolgens werd dieper ingegaan op het configureren van HAProxy en werd afgesloten met een voorbeeld van het gebruik van HAProxy als load balancer.