At have en Load Balancer er altid en god mulighed for at forbedre dit databasemiljø. Det kan hjælpe dig med at omdirigere applikationer til tilgængelige databasenoder, distribuere trafikken på tværs af flere servere for at forbedre ydeevnen eller endda failover, når det er nødvendigt. For at vide, hvad der sker med din trafik/dit system, skal du have et godt overvågningssystem på plads til at overvåge ikke kun dine databasenoder, men også dine Load Balancers, for at tage proaktive eller reaktive handlinger for at afbøde ethvert nuværende eller fremtidigt problem. For at kunne finde et problem, skal du forstå, hvad hver værdi, du ser, betyder.
I denne blog vil vi forklare, hvad HAProxy-statistikken betyder, og hvordan man overvåger den på en venlig måde ved hjælp af grafer og ClusterControl.
Hvad er HAProxy?
HAProxy er en open source-proxy, der kan bruges til at implementere høj tilgængelighed, belastningsbalancering og proxy for TCP- og HTTP-baserede applikationer.
Som en load balancer distribuerer HAProxy trafik fra en oprindelse til en eller flere destinationer og kan definere specifikke regler og/eller protokoller for denne opgave. Hvis en af destinationerne holder op med at svare, markeres den som offline, og trafikken sendes til resten af de tilgængelige destinationer.
HAProxy nodetyper
Når du konfigurerer din HAProxy Load Balancer, er der forskellige nodetyper at konfigurere afhængigt af den funktionalitet du ønsker. Indstillingerne er Frontend, Backend og Listen.
Frontend noder
Når du placerer HAProxy som en omvendt proxy foran dine backend-servere, definerer en frontend-sektion i konfigurationsfilen de IP-adresser og porte, som klienter kan oprette forbindelse til. Forespørgslerne kommer ind i belastningsbalanceren, og svarene returneres til klienten. De passerer gennem frontenden.
frontend site1.com
bind 10.10.10.150:80
use_backend api_servers if { path_beg /api/ }
default_backend web_servers
Backend noder
Det definerer en gruppe af servere, der vil være belastningsbalanceret og tildelt til at håndtere anmodninger, afhængigt af den valgte politik. HAProxy sender anmodninger til en backend og modtager derefter et svar fra en af de aktive servere.
backend web_servers
balance roundrobin
cookie SERVERUSED insert indirect nocache
option httpchk HEAD /
default-server check maxconn 20
server server1 10.10.10.151:80 cookie server1
server server2 10.10.10.152:80 cookie server2
Lyt noder
Det kombinerer de to HAProxy-nodetyper, som vi nævnte ovenfor. Du foretrækker måske den læsbarhed, der opnås ved at have separate frontend- og backend-sektioner, eller måske vil du have en mere kortfattet konfiguration ved at bruge lyttetilgangen.
listen haproxy_10.10.10.143_3307_rw
bind *:3307
mode tcp
tcp-check connect port 9200
timeout client 10800s
timeout server 10800s
balance leastconn
option httpchk
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
server 10.10.10.139 10.10.10.139:3306 check
server 10.10.10.140 10.10.10.140:3306 check backup
server 10.10.10.141 10.10.10.141:3306 check backup
HAProxy-statistikside
HAProxy giver dig mulighed for at aktivere en statistikside med information i realtid for at se, hvad der sker i din Load Balancer. For at aktivere statistiksiden skal du blot bruge "stats enable"-direktivet i din HAProxy-konfigurationsfil (/etc/haproxy/haproxy.cfg). Lad os se et eksempel:
userlist STATSUSERS
group admin users admin
user admin insecure-password admin
user stats insecure-password admin
listen admin_page
bind *:9600
mode http
stats enable
stats refresh 60s
stats uri /
acl AuthOkay_ReadOnly http_auth(STATSUSERS)
acl AuthOkay_Admin http_auth_group(STATSUSERS) admin
stats http-request auth realm admin_page unless AuthOkay_ReadOnly
Bindningslinjen angiver, hvilken IP-adresse og port du vil bruge til at få adgang til statistiksiden. Du kan også konfigurere godkendelse og en opdateringsperiode. Hvis du får adgang til din HAProxy-node ved hjælp af den angivne port (9600 i eksemplet), admin/admin-legitimationsoplysninger, vil du se noget som dette:
Her finder du forskellige nyttige målinger til at overvåge din HAProxy-node.
HAProxy-statistik
Lad os nu se, hvad disse metrics er. Da betydningen afhænger af konteksten, opdeler vi den i Frontend og Backend.
Kø
Backend
Dette afsnit gælder kun for backends og viser, hvor længe klienter venter på, at en server bliver tilgængelig. HAProxy er i stand til at sætte forbindelser i kø, når du bruger maxconn-indstillingen.
Kolonnen "Cur" viser antallet af klientforbindelser, der i øjeblikket er i kø og endnu ikke er tildelt en server. Kolonnen "Max" viser de fleste forbindelser, der nogensinde har været i kø på én gang. Kolonnen "Grænse" viser det maksimale antal forbindelser, der må stå i kø, som defineret af maxqueue-indstillingen på hver serverlinje i konfigurationsfilen.
Sessionshastighed
Frontend
Beskriver den hastighed, hvormed klienter opretter forbindelse til HAProxy.
Kolonnen "Cur" viser den aktuelle hastighed, hvormed klientsessioner, eller fuldt etablerede forbindelser mellem klient og server, oprettes. Hvis du holder musen over dette felt, viser siden følgende metrics:
- Aktuel forbindelseshastighed:Den hastighed, hvormed klienter opretter forbindelse til HAProxy.
- Aktuel sessionshastighed: Den hastighed, hvormed sessioner, som er enheder, der har status som en ende-til-ende-forbindelse, oprettes.
- Aktuel anmodningshastighed:Den hastighed, hvormed HTTP-anmodninger modtages over etablerede forbindelser.
Kolonnen "Max" viser de fleste sessioner, der nogensinde har været i brug samtidigt. Hvis du holder musen over dette felt, viser siden følgende metrics:
- Maks. forbindelseshastighed:Den højeste hastighed, som klienter har oprettet forbindelse til HAProxy med.
- Maks. sessionshastighed:Den højeste hastighed, hvormed klienter har etableret sessioner, som er enheder, der har status som en ende-til-ende-forbindelse.
- Maks. anmodningshastighed:Den højeste hastighed, hvormed HTTP-anmodninger er blevet modtaget over etablerede forbindelser.
Kolonnen "Grænse" viser det maksimale antal sessioner pr. sekund, som frontend vil acceptere, som indstillet af hastighedsgrænse-sessionsindstillingen. Hvis denne grænse overskrides, holdes yderligere forbindelser afventende i stikkets backlog.
Backend
Disse statistikker viser den hastighed, hvormed der oprettes forbindelser til en server.
Kolonnen "Cur" viser den aktuelle hastighed pr. sekund, hvormed forbindelser etableres til serveren. Kolonnen "Max" viser den højeste hastighed, hvormed forbindelser nogensinde er blevet etableret til den givne server. Kolonnen "Grænse" bruges ikke her.
Sessioner
Frontend
Dette afsnit tæller antallet af sessioner eller fulde klient-til-server-forbindelser, der er i brug på belastningsbalanceren.
Kolonnen "Cur" viser det aktuelle antal etablerede sessioner. Kolonnen "Max" viser de fleste sessioner, der nogensinde er blevet etableret samtidigt. Kolonnen "Limit" viser de mest samtidige sessioner, der er tilladt, som defineret af maxconn-indstillingen i frontend. Den pågældende frontend vil stoppe med at acceptere nye forbindelser, når denne grænse er nået. Hvis maxconn ikke er indstillet, så er "Limit" den samme som maxconn-værdien i den globale sektion af din konfiguration. Hvis det ikke er indstillet, er værdien baseret på dit system. Når du holder markøren over kolonnen "Total", viser siden følgende metrics:
- Cum. forbindelser:Samlet antal forbindelser etableret siden HAProxy sidst blev genindlæst.
- Cum. sessioner:Samlet antal sessioner (ende-til-ende-forbindelser) etableret siden sidste genindlæsning.
- Cum. HTTP-anmodninger:Samlet antal HTTP-anmodninger siden sidste genindlæsning.
- HTTP xxx-svar:Samlet antal HTTP-anmodninger, der modtog et xxx-svar.
- Komprimeret 2xx:Samlet antal 2xx-svar, der blev komprimeret, hvis komprimering er aktiveret. Det viser også procentdelen af anmodninger, der blev komprimeret.
- Andre svar:Samlet antal HTTP-anmodninger, der modtog et svar, der ikke er dækket af de andre metrics.
- Opsnappede anmodninger:Samlet antal forespørgsler opsnappet og omdirigeret til siden HAProxy Stats.
Kolonnerne "LbTot" og "Sidste" bruges ikke i dette afsnit.
Backend
Dette afsnit viser antallet af aktuelle forbindelser til enhver af de aktive servere.
Kolonnen "Cur" viser antallet af aktive forbindelser til en server. Kolonnen "Max" viser de fleste forbindelser, der nogensinde er blevet etableret samtidigt til den givne server. Kolonnen "Grænse" viser det maksimale antal forbindelser, der er tilladt for en server, som angivet af maxconn-parameteren på en serverlinje.
Backend-rækken viser værdien af fullconn for "Limit", eller, hvis den ikke er angivet, bruger den følgende formel:Summen af sessionsgrænseværdierne for frontends, der ruter til denne backend, divideret med 10. Kolonnen "Total" viser det kumulative antal forbindelser, der har brugt den givne server. Når du holder markøren over dette felt, viser siden følgende metrics:
- Cum. sessioner:Samlet antal forbindelser etableret til denne server.
- Cum. HTTP-svar:Samlet antal HTTP-svar modtaget fra denne server.
- HTTP xxx-svar:Samlet antal HTTP xxx-svar fra denne server.
- Andre svar:Samlet antal HTTP-svar, der ikke er dækket af de andre metrics.
- Køtid:Mængden af tid i millisekunder, som en forbindelse forblev i kø, mens den ventede på en forbindelsesplads til serveren, i gennemsnit over de sidste 1024 vellykkede forbindelser.
- Forbindelsestid:Den tid i millisekunder, det tog at oprette forbindelse til serveren, i gennemsnit over de sidste 1024 vellykkede forbindelser.
- Responstid:Serverens responstid i millisekunder, som gennemsnit over de sidste 1024 vellykkede forbindelser.
- Samlet tid:Den samlede sessionstid i millisekunder i gennemsnit over de sidste 1024 vellykkede forbindelser.
Kolonnen "LbTot" viser det samlede antal gange, den givne server blev valgt til at betjene en anmodning. Dette kan skyldes normal belastningsbalancering eller på grund af en redispatch fra en fejlbehæftet server. Kolonnen "Sidste" viser tiden siden den sidste forbindelse blev modtaget.
Bytes
Frontend
Dette afsnit viser den kumulative mængde data, der sendes og modtages mellem HAProxy og klienter. Kolonnen "Ind" viser det samlede antal modtagne bytes, og kolonnen "Ud" viser det samlede antal sendte bytes.
Backend
Dette afsnit viser mængden af data sendt og modtaget mellem HAProxy og serveren. Kolonnen "In" viser antallet af bytes sendt til serveren. Kolonnen "Out" viser antallet af bytes, der er modtaget tilbage.
Afvist
Det viser antallet af anmodninger og svar, der blev afvist på grund af sikkerhedsproblemer i både Frontend- og Backend-sektionerne.
Frontend
Kolonnen "Req" viser antallet af anmodninger, der blev afvist på grund af konfigurationsdirektiver (http-request deny, http-request reject osv.) placeret i Frontend- eller Listen-sektionen.
"Resp"-kolonnen viser antallet af svar, der blev afvist af et http-response deny-direktiv, der blev placeret i en frontend eller lytte.
Backend
Kolonnen "Req" gælder kun for backend som helhed. Den viser antallet af anmodninger, der blev afvist af konfigurationsdirektiver (http-request deny, http-request reject osv.) i en backend.
"Resp"-kolonnen viser antallet af svar, der blev afvist for en given server på grund af http-response deny eller tcp-response content refject-konfigurationsdirektiver i en backend.
Fejl
Frontend
Kun kolonnen "Req" bruges her. Det viser antallet af anmodninger, der stødte på en fejl.
Mulige årsager omfatter:
- Tidlig opsigelse fra klienten
- En læsefejl fra klienten
- Klienten fik timeout
- Klienten lukkede forbindelsen
- Klienten sendte en forkert udformet anmodning
- Anmodningen blev målrettet
Backend
Det viser antallet af fejl relateret til kommunikation med en backend-server.
Kolonnen "Req" bruges ikke. Kolonnen "Conn" viser antallet af anmodninger, der stødte på en fejl under forsøget på at oprette forbindelse til serveren. Kolonnen "Resp" viser fejl, der er fundet under modtagelse af svaret.
Advarsler
Backend
Kun for backends. Dette afsnit viser antallet af genforsøg og genudsendelser. Hvis du har tilføjet et genforsøgsdirektiv til din backend, så viser kolonnen "Retr" det samlede antal gange, en forbindelse blev forsøgt igen. Kolonnen "Redis" viser antallet af gange, hvor HAProxy ikke kunne etablere en forbindelse til en server og videresendte den til en anden server. Dette kræver, at du har tilføjet en mulighed for redispatch-direktiv.
Server
Frontend
Det eneste felt fra denne sektion, der gælder for en frontend, er feltet Status. Når status er ÅBEN, fungerer frontenden normalt og klar til at modtage trafik.
Backend
Dette afsnit viser detaljer om status, helbred og vægt for hver server. Kolonnen "Status" viser, om serveren i øjeblikket er oppe, og hvor længe. Den kan vise enhver af følgende statusser:
- OP:Serveren rapporterer som sund.
- NED:Serveren rapporterer som usund og ude af stand til at modtage anmodninger.
- NOLB:Du har tilføjet http-check disable-on-404 til backend, og den sundhedskontrollerede URL har returneret et HTTP 404-svar.
- VEDLIGEHOLDELSE:Serveren er blevet deaktiveret eller sat i vedligeholdelsestilstand.
- DRÆN:Serveren er blevet sat i dræntilstand.
- ingen kontrol:Sundhedstjek er ikke aktiveret for denne server.
Søjlen "LastChk" viser en værdi som L7OK/200 i Xms. Denne værdi betyder, at et Layer 7-sundhedstjek blev udført; det returnerede et HTTP 200 OK-svar, og det gjorde det inden for X millisekund.
Kolonnen "Wght" viser andelen af trafik, den vil acceptere, som indstillet af vægtparameteren på serverlinjen. Kolonnen "Act" viser, om serveren er aktiv (markeret med et Y) eller en backup (markeret med et -). Kolonnen "Bck" viser, om serveren er en backup (markeret med et Y) eller aktiv (markeret med et -).
Kolonnen "Chk" viser antallet af mislykkede sundhedstjek. Kolonnen "Dwn" viser antallet af overgange fra OP til NED. Kolonnen "Dwntme" viser, hvor længe serveren har været nede.
Hvis du har tilføjet en langsom start-parameter til en serverlinje, når du deaktiverer og senere aktiverer den server, viser kolonnen "Thrtle" den procentdel af trafik, serveren vil acceptere. Procentdelen vil gradvist stige til 100 % i løbet af den periode, du har angivet.
Denne information er baseret på et HAProxy-blogindlæg, som du kan henvise til for mere detaljerede oplysninger.
HAProxy på ClusterControl
Udover implementering og administration giver ClusterControl også indsigt i HAProxy-statistikker og realtidsdashboards fra brugergrænsefladen. Fra ClusterControl kan du få adgang til statistiksiden på ClusterControl -> Vælg Cluster -> Noder -> vælg HAProxy-noden svarende til skærmbilledet nedenfor:
Du kan aktivere/deaktivere en server fra belastningsbalanceringen ved at markere/afmarkere afkrydsningsfeltet under kolonnen "Aktiveret". Dette er meget nyttigt, når du ønsker, at din applikation med vilje skal springe forbindelsen til en server over, f.eks. til vedligeholdelse eller til at teste og validere nye konfigurationsparametre eller optimerede forespørgsler.
Du kan også overvåge dine HAProxy-servere fra ClusterControl ved at tjekke sektionen Dashboard.
For at aktivere det skal du blot gå til ClusterControl -> Vælg Cluster -> Dashboards -> Aktiver agentbaseret overvågning. Dette vil implementere en agent på hver node for at få al information til at generere de tilsvarende grafer.
Her vil du ikke kun se alle de nødvendige målinger til at overvåge HAProxy-noden, men også for at overvåge hele miljøet ved hjælp af de forskellige Dashboards.
Konklusion
HAProxy er et godt og kraftfuldt værktøj til at forbedre din database- og applikationsydelse. Det er også nyttigt at tilføje High Availability og Failover til dit miljø. For at vide, hvad der sker i din HAProxy-node, skal du forstå de metrics, der overvåges på statistiksiden, eller endda forbedre denne overvågning ved at tilføje et dashboard for at gøre det mere venligt.
I denne blog har vi forklaret hver metrik nævnt på HAProxy-statistiksiden, og vi viste også, hvordan det ser ud på ClusterControl, hvor du kan få adgang til både statistik og dashboards HAProxy-sektioner fra det samme system.