Wat is HAProxy en hoe verdeelt het verkeer?
Auteur: Redactie Domeny.ForSale Gepubliceerd
In het kort: HAProxy is software die netwerkverkeer ontvangt en doorstuurt naar geselecteerde servers waarop een applicatie draait. Het werkt als reverse proxy en load balancer: het bemiddelt bij verbindingen en verdeelt verkeer over instanties van een dienst. Het helpt grotere belastingen te verwerken en defecte servers te omzeilen, maar alleen HAProxy inzetten garandeert geen ononderbroken beschikbaarheid.
Hoe HAProxy werkt tussen gebruiker en applicatie
Een reverse proxy ontvangt verbindingen namens de applicatieservers. De gebruiker maakt verbinding met het adres van de dienst waarachter HAProxy staat, in plaats van rechtstreeks met een specifieke achterliggende server. HAProxy kiest de bestemming en stuurt het verkeer door. Het antwoord keert via dezelfde tussenlaag terug.
Bij load balancing wordt verkeer verdeeld over de beschikbare servers. Die verdeling hoeft niet exact gelijk te zijn: een krachtigere machine kan meer taken krijgen, terwijl een server tijdens onderhoud kan worden uitgesloten van nieuwe verzoeken.
In de configuratie van HAProxy zijn twee begrippen belangrijk. Frontend bepaalt waar het programma verbindingen ontvangt, bijvoorbeeld op poort 443 voor HTTPS. Backend beschrijft een groep doelservers en de regels om daaruit een server te kiezen. Eén frontend kan verkeer naar verschillende backends sturen, afhankelijk van het domein of het pad in het adres.
Ondersteuning voor TCP, HTTP en versleuteling
HAProxy kan op verschillende communicatieniveaus werken. In TCP-modus stuurt het verbindingen door zonder beslissingen te nemen op basis van de inhoud van HTTP-verzoeken. Dit is ook nuttig voor andere diensten dan websites, zolang die TCP gebruiken.
In HTTP-modus begrijpt HAProxy onderdelen van het verzoek, zoals de hostnaam, het pad en de headers. Het kan daardoor verkeer voor /api naar API-servers sturen en de overige verzoeken naar de applicatie die de website weergeeft. Deze regels worden vaak vastgelegd als ACL: voorwaarden die bepalen welk verkeer aan welke regels voldoet.
Bij HTTPS is het belangrijk waar TLS wordt beëindigd, het protocol dat de verbinding beveiligt:
- TLS beëindigen in HAProxy: het programma beheert het certificaat en ontsleutelt het verkeer, zodat het HTTP kan analyseren. De verbinding naar de achterliggende servers kan opnieuw worden versleuteld.
- De versleutelde verbinding doorsturen: de doelserver handelt TLS af. HAProxy ziet dan geen HTTP-paden of -headers en kan die dus niet gebruiken om verkeer te routeren.
TLS beëindigen in HAProxy betekent niet automatisch dat de verbinding met de applicatie versleuteld is. Dat deel moet apart worden geconfigureerd, inclusief de controle van het certificaat van de doelserver.
Hoe verkeersverdeling helpt bij storingen
Stel je een webwinkel voor die op drie applicatieservers draait. HAProxy ontvangt verzoeken van klanten en verdeelt ze via round robin, dus om de beurt over de beschikbare servers. Een alternatief is bijvoorbeeld least connections, waarbij de voorkeur uitgaat naar de server met minder actieve verbindingen. Welke methode geschikt is, hangt af van het soort verkeer.
HAProxy kan health checks uitvoeren: periodieke controles van de beschikbaarheid van de achterliggende servers. Als een server niet meer door deze controles komt, kan het programma stoppen met het toewijzen van nieuw verkeer aan die server. De overige machines blijven de verzoeken afhandelen. Actieve verbindingen met de defecte server kunnen echter worden verbroken.
Een controle of een poort openstaat, bevestigt op zichzelf niet dat de webwinkel een bestelling kan verwerken. Een HTTP-controle van een speciaal controle-endpoint van de applicatie, dat aangeeft of de applicatie gereed is, is vaak geschikter. Kies zorgvuldig wat de controle moet testen: een te oppervlakkige controle mist een storing, terwijl een te strenge controle goed werkende instanties onnodig kan uitsluiten.
Verkeer verdelen vereist ook een geschikte applicatiearchitectuur. Als het winkelmandje van een klant alleen in het geheugen van één server is opgeslagen, kan een andere machine het bij een volgend verzoek mogelijk niet terughalen. Een gedeelde opslag voor sessies helpt daarbij. Een klant aan één server koppelen, ook wel sticky sessions genoemd, beschermt de sessiegegevens niet tegen uitval van die machine.
Waarin HAProxy verschilt van een webserver
De belangrijkste taak van HAProxy is bemiddelen bij communicatie en verkeer beheren, niet het gebruikelijke aanbieden van websitebestanden of uitvoeren van applicatiecode. In de praktijk staat het vóór webservers of applicatieprocessen die antwoorden genereren. Het vervangt ook geen database of het mechanisme waarmee die wordt gerepliceerd.
NGINX en Apache HTTP Server kunnen eveneens als reverse proxy werken en tegelijk als webserver dienen. De keuze draait dus niet simpelweg om de vraag welk hulpmiddel in het algemeen beter is. HAProxy is een logische kandidaat als er een aparte laag nodig is voor het verdelen van TCP- of HTTP-verkeer, het controleren van de achterliggende servers en het toepassen van regels voor het routeren van verbindingen.
Voor één kleine website kan de bestaande webserver of de load balancer van de cloudprovider voldoende zijn. HAProxy toevoegen betekent een extra component dat updates, monitoring en configuratiebeheer nodig heeft.
Wat je vóór de ingebruikname moet controleren
Eén HAProxy-instantie kan een enkel storingspunt worden: als die uitvalt, kunnen gebruikers zelfs goed werkende applicatieservers niet meer bereiken. Een systeem dat hoge beschikbaarheid vereist, heeft daarom ook redundante proxy-instanties nodig en een mechanisme om het verkeer daartussen om te schakelen.
Controleer vóór de ingebruikname in productie vier zaken:
- Controles van de achterliggende servers: herkennen ze wanneer de applicatie niet gereed is, in plaats van alleen te controleren of een poort werkt?
- Limieten en time-outs: hoeveel verbindingen accepteert het systeem en hoelang wacht het op een antwoord?
- Clientadres: hoe ontvangt de applicatie het werkelijke IP-adres en welke proxyheaders mag ze vertrouwen?
- Waarneembaarheid: maken logs en meetgegevens het mogelijk om fouten, vertragingen en overbelasting te herkennen?
Controleer de beschikbaarheid van functies en de configuratiesyntaxis in de officiële documentatie van de HAProxy-versie die je gebruikt. Voer de eerste test uit met twee applicatie-instanties: schakel er één uit terwijl je gecontroleerd verkeer genereert en controleer zowel de reactie van de proxy als het gedrag van de gebruikerssessie.
Zie ook: Wat is 2FA?
