Slik konfigurerer du HAProxy som belastningsbalanser for Nginx på CentOS 8


For å sikre maksimal tilgjengelighet for nettapplikasjoner, skalerbarhet og høy ytelse, er det nå vanlig å implementere teknologier som introduserer redundans, som serverklynger og lastbalansering. For eksempel å sette opp en klynge med servere som alle kjører samme applikasjon(er) og deretter distribuere lastbalansering(e) foran dem for å distribuere trafikken.

HAProxy er en åpen kildekode, kraftig, høy ytelse, pålitelig, sikker og mye brukt TCP/HTTP lastbalanser med høy tilgjengelighet, proxy-server og SSL/TLS-terminator bygget for svært høy trafikk nettsteder. Den kjører pålitelig godt på Linux, Solaris, FreeBSD, OpenBSD samt AIX-operativsystemer.

Denne veiledningen viser hvordan du setter opp en dedikert lastbalanser med høy tilgjengelighet med HAProxyCentOS 8 for å kontrollere trafikk i en klynge med NGINX-nettservere. Den viser også hvordan du konfigurerer SSL/TLS-avslutning i HAProxy.

Forutsetninger:

Totalt 4 servere med minimal CentOS 8-installasjon.

Test miljøoppsett

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Trinn 1: Sette opp Nginx HTTP Server på klientmaskinene

1. Logg på alle CentOS 8-klientmaskinene dine og installer Nginx-nettserveren ved å bruke dnf-pakkebehandlingen som vist.

dnf install Nginx

2. Start deretter Nginx-tjenesten, for nå, aktiver den til å starte automatisk ved systemoppstart og bekreft at den er oppe og kjører ved å sjekke statusen ved hjelp av systemctl kommandoer (gjør dette på alle klientmaskiner).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Hvis brannmurtjenesten kjører på alle klientmaskinene (som du kan sjekke ved å kjøre systemctl start brannmur), må du legge til HTTP og HTTPS-tjenester i brannmurkonfigurasjonen for å tillate at forespørsler fra lastbalanseren går gjennom brannmuren til Nginx-nettserverne. Last deretter brannmuren-tjenesten på nytt for å utføre de nye endringene (gjør dette på alle klientmaskiner).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Deretter åpner du en nettleser på dine lokale maskiner og tester om Nginx-installasjonen fungerer bra. Bruk klientens IP-er for å navigere, når du ser Nginx-testsiden, betyr det at webserveren som er installert på klientmaskinen fungerer som den skal.

5. Deretter må vi lage testsider på klientmaskinene som vi skal bruke senere for å teste ut HAProxy-oppsettet.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Trinn 2: Installere og konfigurere HAProxy Server på CentOS 8

6. Installer nå HAProxy-pakken på HAProxy-serveren ved å kjøre følgende kommando.

dnf install haproxy

7. Start deretter HAProxy-tjenesten, aktiver den til å starte automatisk ved systemoppstart og bekreft statusen.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Nå skal vi konfigurere HAProxy ved hjelp av følgende konfigurasjonsfil.

vi /etc/haproxy/haproxy.cfg

Konfigurasjonsfilen er delt inn i fire hovedseksjoner.

  • globale innstillinger – setter prosessomfattende parametere.
  • standarder – denne delen angir standardparametere for alle andre seksjoner etter erklæringen.
  • frontend – denne delen beskriver et sett med lyttekontakter som aksepterer klienttilkoblinger.
  • Backend – denne delen beskriver et sett med servere som proxyen vil koble til for å videresende innkommende tilkoblinger.

For å forstå alternativene under globale innstillinger og standarder, les HAProxy-dokumentasjonen (lenke gitt på slutten av artikkelen). For denne veiledningen vil vi bruke standardinnstillingene.

Sette opp HAProxy-logging

9. HAProxy når den er implementert vil spille en betydelig rolle i IT-infrastrukturen din, og konfigurering av logging for det er derfor et grunnleggende krav; dette lar deg få innsikt om hver tilkobling til backend-webserverne dine.

logg-parameteren (uthevet i følgende skjermbilde) erklærer en global Syslog-server (for eksempel rsyslog standard i CentOS) som vil motta loggmeldinger. Mer enn én server kan deklareres her.

Standardkonfigurasjonen peker på localhost (127.0.0.1) og local2 er standard funksjonskode som brukes til å identifisere HAProxy-loggmeldinger under rsyslog.

10. Deretter må du fortelle rsyslog-serveren hvordan den skal motta og behandle HAProxy-loggmeldinger. Åpne rsyslog-konfigurasjonsfilen til /etc/rsyslog.conf eller opprett en ny fil i /etc/rsyslog.d-katalogen, for eksempel /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Kopier og lim inn følgende konfigurasjon for å samle logg med UDP på standardporten 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Legg også til disse linjene for å instruere rsyslog til å skrive til to separate loggfiler basert på alvorlighetsgraden, der local2 er anleggskoden definert i HAProxy-konfigurasjonen ovenfor.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Lagre filen og lukk den. Start deretter rsyslog-tjenesten på nytt for å bruke de siste endringene.

systemctl restart rsyslog

Konfigurere HAProxy Front-end og Back-ends

12. I denne delen vil vi demonstrere hvordan du konfigurerer front-end og back-end proxyer. Gå tilbake til HAProxy-konfigurasjonsfilen og endre standard front-end og backend-seksjoner som følger. Vi vil ikke gå inn i en detaljert forklaring av hver parameter, du kan alltid referere til den offisielle dokumentasjonen.

Følgende konfigurasjon definerer en lytt-del som brukes til å betjene HAProxy Stats-siden. Parameteren bind tilordner en lytter til en gitt IP-adresse (* for alle i dette tilfellet) og port (9000 >).

Statistikk aktiver-innstillingen aktiverer statistikksiden som vil bli åpnet ved hjelp av URI /stats (dvs. http://server_ip:9000/stats) .

Statistisk autentisering-innstillingen brukes til å legge til en grunnleggende autentisering når du går inn på siden (erstatt haproxy og Lostp@1ss med et brukernavn og passord for din valg).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. Den neste konfigurasjonen definerer en grensesnittdel kalt TL (du kan gi et navn du liker). Parameteren mode definerer modusen HAProxy opererer i.

Parameteren acl (Access Control List) brukes til å ta en avgjørelse basert på innhold hentet fra forespørselen. I dette eksemplet anses forespørselen som vanlig HTTP hvis den ikke er gjort over SSL.

Deretter brukes http-request set-header-innstillingen for å legge til en HTTP-header i forespørselen. Dette hjelper Nginx med å informere om at den første forespørselen ble gjort over HTTP (eller via port 80).

default_backend eller use_backend-direktivet definerer backend-tjenerne, i dette tilfellet referert til av TL_web_servers.

Merk at HAProxy vil returnere en «503 Service Unavailable error» hvis en forespørsel ikke rutes av en use_backend eller default_backend > direktiv.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Deretter må vi definere en backend-seksjon der balanse-innstillingen definerer hvordan HAProxy velger back-end-servere for å behandle en forespørsel hvis ikke utholdenhetsmetode overstyrer dette valget.

informasjonskapsel-direktivet muliggjør informasjonskapselbasert utholdenhet, det instruerer HAProxy om å sende en informasjonskapsel kalt SERVERID til klienten og for å knytte den til ID til serveren som ga det første svaret.

server-direktivet brukes til å definere oppstrømstjenerne i formatet sever_name (f.eks. websrv1), server_IP:port og alternativer.

Et nøkkelalternativ er sjekk som forteller HAProxy å fortsette å sjekke tilgjengeligheten til en server og rapportere på statistikksiden.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Kommenter eventuelle andre frontend- og backend-seksjoner som vist i skjermbildet som følger. Lagre filen og lukk den.

15. Start nå HAProxy-tjenesten på nytt for å bruke de nye endringene.

systemctl restart haproxy

16. Deretter kontrollerer du at HTTP (port 80) og HTTPS (port 433))-tjenester åpnes i brannmuren for å akseptere klientforespørsler som følger. Åpne også port 9000 i brannmuren for å få tilgang til statistikksiden og last inn brannmurinnstillingene på nytt.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

Trinn 3: Testing av HAProxy-oppsett og visning av statistikk

17. Nå er det på tide å teste HAPrxoy-oppsettet. På den lokale skrivebordsmaskinen der du får tilgang til alle serverne fra, legg til følgende linje i /etc/hosts-filen for å gjøre det mulig for oss å bruke dummy-domenet.

10.42.0.247  www.tecmint.lan

18. Åpne deretter en nettleser og naviger ved å bruke enten serveradressen eller nettstedsdomenet.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. For å få tilgang til HAProxy-statistikksiden, bruk følgende adresse.

http://10.42.0.247:9000/stats

Bruk deretter brukernavnet og passordet du definerte i HAProxy-konfigurasjonsfilen (se stats auth-parameteren).

Etter en vellykket pålogging vil du lande på HAProxy-statistikksiden som viser deg beregninger som dekker helsen til serverne dine, gjeldende forespørselsfrekvenser, responstider og mye mer.

For å demonstrere hvordan statusrapporten fungerer angående fargekodene fungerer, har vi satt inn en av back-end-serverne.

Trinn 4: Konfigurere HTTPS i HAProxy ved å bruke et selvsignert SSL-sertifikat

20. I denne siste delen vil vi demonstrere hvordan du konfigurerer SSL/TLS for å sikre all kommunikasjon mellom HAProxy-serveren og klienten. HAProxy støtter fire store HTTPS-konfigurasjonsmoduser, men for denne veiledningen vil vi bruke SSL/TLS-avlasting.

I SSL/TLS-avlastingsmodus dechiffrerer HAProxy trafikken på klientsiden og kobles i klar trafikk til backend-serverne.

Vi starter med å lage sertifikatet og nøkkelen som vist (svar på spørsmålene basert på bedriftsdetaljene dine under opprettelsen av sertifikatet, som fremhevet på skjermbildet).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. Deretter åpner du HAProxy-konfigurasjonsfilen (/etc/haproxy/haproxy.cfg) og rediger frontend-delen.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

Lagre filen og lukk den.

22. Start deretter HAProxy-tjenesten på nytt for å bruke de nye endringene.

systemctl restart haproxy.service

23. Deretter åpner du en nettleser og prøver å få tilgang til nettstedet en gang til. Nettleseren vil vise en feil på grunn av det selvsignerte sertifikatet. Klikk Avansert for å fortsette.

Det er alt for nå! Hver nettapplikasjon har sitt eget sett med krav, du må designe og konfigurere lastbalansering for å passe IT-infrastrukturen og applikasjonens krav.

For å få mer innsikt i noen av konfigurasjonsalternativene som brukes i denne veiledningen, og generelt hvordan du bruker HAProxy, se den offisielle HAProxy-fellesskapsutgaven eller dokumentasjonen for HAProxy enterprise-versjon. Du kan legge inn spørsmål eller tanker via tilbakemeldingsskjemaet nedenfor.