De vertaling van het artikel is gemaakt aan de vooravond van de start van de cursus
Loadbalancing is een veelgebruikte oplossing voor het horizontaal schalen van webapplicaties over meerdere hosts, terwijl gebruikers één enkel toegangspunt tot de service krijgen.
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
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
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
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
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 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
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
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
Meer over de cursus
Bron: www.habr.com