De HAProxy load balancer installeren op CentOS

De vertaling van het artikel is gemaakt aan de vooravond van de start van de cursus "Linux-beheerder. Virtualisatie en clustering"

De HAProxy load balancer installeren op CentOS

Loadbalancing is een veelgebruikte oplossing voor het horizontaal schalen van webapplicaties over meerdere hosts, terwijl gebruikers één enkel toegangspunt tot de service krijgen. HAProxy is een van de meest populaire open source load-balancing-software die ook hoge beschikbaarheid en proxy-functionaliteit biedt.

HAProxy streeft ernaar het gebruik van bronnen te optimaliseren, de doorvoer te maximaliseren, de responstijd te minimaliseren en overbelasting van individuele bronnen te voorkomen. Het kan op verschillende Linux-distributies worden geïnstalleerd, zoals CentOS 8, waar we ons in deze handleiding op zullen concentreren, maar ook op systemen Debian 8 и Ubuntu 16.

De HAProxy load balancer installeren op CentOS

HAProxy is met name geschikt voor websites met zeer veel verkeer en wordt daarom vaak gebruikt om de betrouwbaarheid en prestaties van webserviceconfiguraties met meerdere servers te verbeteren. In deze handleiding worden de stappen beschreven voor het instellen van HAProxy als load balancer op een CentOS 8-cloudhost, die vervolgens verkeer naar uw webservers leidt.

Als voorwaarde voor de beste resultaten moet u minimaal twee webservers en een load-balancing-server hebben. Webservers moeten op zijn minst een basiswebservice draaien, zoals nginx of httpd, om de taakverdeling daartussen te testen.

HAProxy installeren op CentOS 8

Omdat HAProxy een zich snel ontwikkelende open source-applicatie is, is de distributie die voor u beschikbaar is in de standaard CentOS-repository's mogelijk niet de nieuwste versie. Om de huidige versie te achterhalen, voert u de volgende opdracht uit:

sudo yum info haproxy

HAProxy biedt altijd drie stabiele versies waaruit u kunt kiezen: de twee meest recente ondersteunde versies en een derde, oudere versie die nog steeds kritische updates ontvangt. U kunt altijd de nieuwste stabiele versie op de website van HAProxy controleren en vervolgens beslissen met welke versie u wilt werken.

In deze handleiding installeren we de nieuwste stabiele versie 2.0, die op het moment van schrijven van de handleiding nog niet beschikbaar was in de standaardrepository's. U moet het vanaf de oorspronkelijke bron installeren. Maar controleer eerst of u aan de noodzakelijke voorwaarden hebt voldaan om het programma te downloaden en te compileren.

sudo yum install gcc pcre-devel tar make -y

Download de broncode met behulp van de onderstaande opdracht. U kunt controleren of er een nieuwere versie beschikbaar is op HAProxy-downloadpagina.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Zodra het downloaden is voltooid, pakt u de bestanden uit met behulp van de onderstaande opdracht:

tar xzvf ~/haproxy.tar.gz -C ~/

Ga naar de uitgepakte bronmap:

cd ~/haproxy-2.0.7

Compileer vervolgens het programma voor uw systeem:

make TARGET=linux-glibc

En ten slotte installeert u HAProxy zelf:

sudo make install

HAProxy is nu geïnstalleerd, maar er zijn enkele extra manipulaties nodig om het te laten werken. Laten we doorgaan met het instellen van de onderstaande software en services.

HAProxy instellen voor uw server

Voeg nu de volgende mappen en statistiekenbestanden toe voor de HAProxy-vermeldingen:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Maak een symbolische link voor de binaire bestanden, zodat u als gewone gebruiker HAProxy-opdrachten kunt uitvoeren:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Als u een proxy als service aan uw systeem wilt toevoegen, kopieert u het haproxy.init-bestand uit de voorbeelden naar uw map /etc/init.d. Bewerk de bestandsrechten zodat het script wordt uitgevoerd en start vervolgens de systemd-daemon opnieuw:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

U moet ook toestaan ​​dat de service automatisch opnieuw opstart wanneer het systeem opstart:

sudo chkconfig haproxy on

Voor het gemak wordt ook aanbevolen om een ​​nieuwe gebruiker toe te voegen om HAProxy uit te voeren:

sudo useradd -r haproxy

Hierna kunt u het geïnstalleerde versienummer opnieuw controleren met behulp van de volgende opdracht:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

In ons geval zou de versie 2.0.7 moeten zijn, zoals weergegeven in de voorbeelduitvoer hierboven.

Ten slotte is de standaardfirewall in CentOS 8 behoorlijk beperkend voor dit project. Gebruik de volgende opdrachten om de vereiste services toe te staan ​​en de firewall opnieuw in te stellen:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Loadbalancer instellen

Het instellen van HAProxy is een vrij eenvoudig proces. In wezen hoeft u HAProxy alleen maar te vertellen naar welke verbindingen het moet luisteren en waar het deze moet doorgeven.

Dit wordt gedaan door een configuratiebestand /etc/haproxy/haproxy.cfg te maken met definiërende instellingen. U kunt lezen over HAProxy-configuratieopties op de documentatiepaginaals je er meer over wilt weten.

Loadbalancing op de transportlaag (laag 4)

Laten we beginnen met de basisopstelling. Maak een nieuw configuratiebestand, bijvoorbeeld met behulp van vi met het onderstaande commando:

sudo vi /etc/haproxy/haproxy.cfg

Voeg de volgende secties toe aan het bestand. Vervangen server naam hoe moeten uw servers worden aangeroepen op de statistiekenpagina, en privé_ip — privé-IP-adressen van de servers waarnaar u webverkeer wilt leiden. U kunt privé-IP-adressen controleren op het UpCloud-configuratiescherm en op het tabblad Prive netwerk in het menu Netwerk.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Dit definieert een load balancer voor de transportlaag (laag 4) met de externe naam http_front, luisterend op poort 80, die vervolgens verkeer doorstuurt naar een standaard backend met de naam http_back. Aanvullende statistieken /haproxy?stats verbindt de statistiekenpagina met het opgegeven adres.

Verschillende load-balancing-algoritmen.

Door servers in de backend-sectie te specificeren, kan HAProxy deze servers gebruiken voor taakverdeling volgens een round-robin-algoritme, indien mogelijk.

Balancing-algoritmen worden gebruikt om te bepalen aan welke server in de backend elke verbinding wordt doorgegeven. Hier zijn enkele van de handige opties:

  • Roundrobin: Elke server wordt beurtelings gebruikt, afhankelijk van zijn gewicht. Dit is het meest vloeiende en eerlijke algoritme wanneer de verwerkingstijd van de servers gelijkmatig verdeeld blijft. Dit algoritme is dynamisch, waardoor het gewicht van de server direct kan worden aangepast.
  • Minste conn: de server met de minste verbindingen wordt geselecteerd. Round Robin wordt uitgevoerd tussen servers met dezelfde belasting. Het gebruik van dit algoritme wordt aanbevolen voor lange sessies zoals LDAP, SQL, TSE etc., maar is niet erg geschikt voor korte sessies zoals HTTP.
  • Ten eerste: De eerste server met beschikbare verbindingsslots ontvangt de verbinding. Servers worden geselecteerd van het laagste numerieke ID tot het hoogste, wat standaard de positie van de server in de farm is. Zodra een server maxconn bereikt, wordt de volgende server gebruikt.
  • Bron: Het bron-IP-adres wordt gehasht en gedeeld door het totale gewicht van actieve servers om te bepalen welke server het verzoek zal ontvangen. Op deze manier gaat hetzelfde client-IP-adres altijd naar dezelfde server, terwijl de servers hetzelfde blijven.

Inrichten van loadbalancing op applicatieniveau (laag 7)

Een andere beschikbare optie is het configureren van een load balancer die op de applicatielaag (laag 7) draait, wat handig is als delen van uw webapplicatie zich op verschillende hosts bevinden. Dit kan worden bereikt door de transmissie van de verbinding te beperken, bijvoorbeeld via URL.

Open het HAProxy-configuratiebestand met een teksteditor:

sudo vi /etc/haproxy/haproxy.cfg

Configureer vervolgens de frontend- en backend-segmenten volgens het onderstaande voorbeeld:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

De frontend declareert een ACL-regel met de naam url_blog die van toepassing is op alle verbindingen met paden die beginnen met /blog. Use_backend specificeert dat verbindingen die voldoen aan de voorwaarde url_blog moeten worden bediend door een backend met de naam blog_back, en dat alle andere verzoeken worden afgehandeld door de standaard backend.

Aan de backend-kant stelt de configuratie twee groepen servers in: http_back, zoals voorheen, en een nieuwe genaamd blog_back, die verbindingen met example.com/blog afhandelt.

Nadat u de instellingen heeft gewijzigd, slaat u het bestand op en start u HAProxy opnieuw met de volgende opdracht:

sudo systemctl restart haproxy

Als u tijdens het opstarten waarschuwingen of foutmeldingen ontvangt, controleer dan uw configuratie en zorg ervoor dat u alle benodigde bestanden en mappen heeft aangemaakt. Probeer vervolgens opnieuw op te starten.

Het testen van de opstelling

Zodra HAProxy is geconfigureerd en actief is, opent u het openbare IP-adres van de load balancer-server in een browser en controleert u of u correct bent verbonden met de backend. De stats uri-parameter in de configuratie creëert een statistiekenpagina op het opgegeven adres.

http://load_balancer_public_ip/haproxy?stats

Wanneer u de statistiekenpagina laadt en al uw servers groen zijn, is de installatie geslaagd!

De HAProxy load balancer installeren op CentOS

De statistiekenpagina bevat nuttige informatie voor het volgen van uw webhosts, inclusief up/down-tijd en aantal sessies. Als de server rood gemarkeerd is, zorg er dan voor dat de server is ingeschakeld en dat u deze kunt pingen vanaf de load balancer-machine.

Als uw load balancer niet reageert, zorg er dan voor dat HTTP-verbindingen niet worden geblokkeerd door een firewall. Zorg er ook voor dat HAProxy werkt met behulp van de onderstaande opdracht:

sudo systemctl status haproxy

De statistiekenpagina beveiligen met een wachtwoord

Als de statistiekenpagina echter eenvoudigweg aan de voorkant wordt vermeld, is deze voor iedereen zichtbaar, wat misschien geen goed idee is. In plaats daarvan kunt u er een aangepast poortnummer aan toewijzen door het onderstaande voorbeeld toe te voegen aan het einde van uw haproxy.cfg-bestand. Vervangen gebruikersnaam и wachtwoord voor iets veiligs:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Nadat u een nieuwe luisteraargroep hebt toegevoegd, verwijdert u de oude statistieken-uri-link uit de frontend-groep. Wanneer u klaar bent, slaat u het bestand op en start u HAProxy opnieuw.

sudo systemctl restart haproxy

Open vervolgens de load balancer opnieuw met het nieuwe poortnummer en log in met de gebruikersnaam en het wachtwoord die u in het configuratiebestand heeft opgegeven.

http://load_balancer_public_ip:8181

Zorg ervoor dat al uw servers nog steeds groen zijn en open vervolgens alleen het IP-adres van de load balancer zonder poortnummers in uw browser.

http://load_balancer_public_ip/

Als u op zijn minst een aantal verschillende bestemmingspagina's op uw back-endservers heeft, zult u merken dat u elke keer dat u de pagina opnieuw laadt, een antwoord krijgt van een andere host. U kunt verschillende balanceringsalgoritmen uitproberen in het configuratiegedeelte of uitchecken volledige documentatie.

Conclusie: HAProxy Load Balancer

Gefeliciteerd met het succesvol instellen van uw HAProxy-load balancer! Zelfs met een eenvoudige taakverdeling kunt u de prestaties en beschikbaarheid van uw webapplicatie aanzienlijk verbeteren. Deze handleiding is slechts een inleiding tot taakverdeling met HAProxy, dat tot veel meer in staat is dan wat in de snelle installatiehandleiding kan worden behandeld. We raden aan om met verschillende configuraties te experimenteren met behulp van uitgebreide documentatie, beschikbaar voor HAProxy, en begin vervolgens met het plannen van de taakverdeling voor uw productieomgeving.

Door meerdere hosts te gebruiken om uw webservice met vrije ruimte te beschermen, kan de load balancer zelf nog steeds een storingspunt vormen. U kunt de hoge beschikbaarheid verder verbeteren door een zwevend IP-adres te installeren tussen meerdere load balancers. Meer hierover leest u in onze artikel over zwevende IP-adressen op UpCloud.

Meer over de cursus "Linux-beheerder. Virtualisatie en clustering"***

Bron: www.habr.com

Voeg een reactie