Att ha en lastbalanserare är alltid ett bra alternativ för att förbättra din databasmiljö. Det kan hjälpa dig att omdirigera applikationer till tillgängliga databasnoder, distribuera trafiken över flera servrar för att förbättra prestanda, eller till och med failover vid behov. För att veta vad som händer med din trafik/ditt system måste du ha ett bra övervakningssystem på plats för att övervaka inte bara dina databasnoder utan även dina lastbalanserare, för att vidta proaktiva eller reaktiva åtgärder för att mildra eventuella aktuella eller framtida problem. För att kunna hitta ett problem måste du förstå vad varje värde du ser betyder.
I den här bloggen kommer vi att förklara vad HAProxy-statistiken betyder och hur man övervakar den på ett vänligt sätt med hjälp av grafer och ClusterControl.
Vad är HAProxy?
HAProxy är en proxy med öppen källkod som kan användas för att implementera hög tillgänglighet, lastbalansering och proxy för TCP- och HTTP-baserade applikationer.
Som lastbalanserare distribuerar HAProxy trafik från ett ursprung till en eller flera destinationer och kan definiera specifika regler och/eller protokoll för denna uppgift. Om någon av destinationerna slutar svara markeras den som offline och trafiken skickas till resten av de tillgängliga destinationerna.
HAProxy-nodtyper
När du konfigurerar din HAProxy Load Balancer finns det olika nodtyper att konfigurera beroende på vilken funktion du vill ha. Alternativen är Frontend, Backend och Listen.
Frontendnoder
När du placerar HAProxy som en omvänd proxy framför dina backend-servrar, definierar en frontend-sektion i konfigurationsfilen de IP-adresser och portar som klienter kan ansluta till. Förfrågningarna går in i lastbalanseraren och svaren returneras till klienten. De passerar genom fronten.
frontend site1.com
bind 10.10.10.150:80
use_backend api_servers if { path_beg /api/ }
default_backend web_servers
Backend-noder
Det definierar en grupp servrar som kommer att belastningsbalanseras och tilldelas för att hantera förfrågningar, beroende på vald policy. HAProxy skickar förfrågningar till en backend och får sedan ett svar från en av de aktiva servrarna.
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
Lyssningsnoder
Den kombinerar de två HAProxy-nodtyperna som vi nämnde ovan. Du kanske föredrar läsbarheten som uppnås genom att ha separata frontend- och backend-sektioner, eller så kanske du vill ha en mer kortfattad konfiguration med hjälp av lyssnametoden.
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-statistiksidan
HAProxy låter dig aktivera en statistiksida med realtidsinformation för att se vad som händer i din lastbalanserare. För att aktivera statistiksidan behöver du bara använda "stats enable"-direktivet i din HAProxy-konfigurationsfil (/etc/haproxy/haproxy.cfg). Låt oss se ett exempel:
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
Bindningsraden anger vilken IP-adress och port du ska använda för att komma åt statistiksidan. Du kan också konfigurera autentisering och en uppdateringsperiod. Om du får åtkomst till din HAProxy-nod med den angivna porten (9600 i exemplet), admin/admin-referenser, kommer du att se något i stil med detta:
Här hittar du olika användbara mätvärden för att övervaka din HAProxy-nod.
HAProxy-statistik
Nu ska vi se vad dessa mätvärden är. Eftersom innebörden beror på sammanhanget kommer vi att dela upp det i Frontend och Backend.
Kö
Backend
Det här avsnittet gäller endast backends och visar hur länge klienter väntar på att en server ska bli tillgänglig. HAProxy kan köa anslutningar när du använder maxconn-inställningen.
Kolumnen "Cur" visar antalet klientanslutningar som för närvarande är köade och ännu inte tilldelade en server. Kolumnen "Max" visar de flesta anslutningar som någonsin har stått i kö på en gång. Kolumnen "Begränsning" visar det maximala antalet anslutningar som tillåts köas, enligt definitionen av maxköinställningen på varje serverrad i konfigurationsfilen.
Sessionsfrekvens
Frontend
Beskriver den hastighet med vilken klienter ansluter till HAProxy.
Kolumnen "Cur" visar den aktuella hastigheten med vilken klientsessioner, eller fullt etablerade anslutningar mellan klient och server, skapas. Om du för musen över det här fältet visar sidan följande mätvärden:
- Aktuell anslutningshastighet:Den hastighet med vilken klienter ansluter till HAProxy.
- Aktuell sessionsfrekvens: Den hastighet med vilken sessioner, som är enheter som har tillståndet för en änd-till-ände-anslutning, skapas.
- Aktuell begärandehastighet:Den hastighet med vilken HTTP-förfrågningar tas emot över etablerade anslutningar.
Kolumnen "Max" visar de flesta sessioner som någonsin har använts samtidigt. Om du för musen över det här fältet visar sidan följande mätvärden:
- Max anslutningshastighet:Den högsta hastigheten som klienter har anslutit till HAProxy.
- Max sessionsfrekvens:Den högsta frekvensen med vilken klienter har etablerat sessioner, som är enheter som har statusen för en end-to-end-anslutning.
- Max request rate:Den högsta hastigheten med vilken HTTP-förfrågningar har tagits emot över etablerade anslutningar.
Kolumnen "Begränsning" visar det maximala antalet sessioner per sekund som gränssnittet accepterar, enligt inställningen för hastighetsgräns för sessioner. Om denna gräns överskrids hålls ytterligare anslutningar väntande i uttagets eftersläpning.
Backend
Denna statistik visar den hastighet med vilken anslutningar görs till en server.
Kolumnen "Cur" visar den aktuella hastigheten, per sekund, med vilken anslutningar upprättas till servern. Kolumnen "Max" visar den högsta hastigheten med vilken anslutningar någonsin har upprättats till den givna servern. Kolumnen "Begränsning" används inte här.
Sessioner
Frontend
Det här avsnittet räknar antalet sessioner, eller fullständiga klient-till-server-anslutningar, som används på lastbalanseraren.
Kolumnen "Cur" visar det aktuella antalet etablerade sessioner. Kolumnen "Max" visar de flesta sessioner som någonsin har etablerats samtidigt. Kolumnen "Limit" visar de flesta samtidiga sessioner som är tillåtna, enligt definitionen av maxconn-inställningen i frontend. Det specifika gränssnittet kommer att sluta acceptera nya anslutningar när denna gräns nås. Om maxconn inte är inställt är "Limit" detsamma som maxconn-värdet i den globala delen av din konfiguration. Om det inte är inställt baseras värdet på ditt system. När du håller muspekaren över kolumnen "Totalt" visar sidan följande mätvärden:
- Cum. anslutningar:Kumulativt antal anslutningar etablerade sedan HAProxy senast laddades om.
- Cum. sessioner:Sammanlagt antal sessioner (änd-till-ände-anslutningar) som har upprättats sedan den senaste omladdningen.
- Cum. HTTP-förfrågningar:Kumulativt antal HTTP-förfrågningar sedan den senaste omladdningen.
- HTTP xxx-svar:Totalt antal HTTP-förfrågningar som fick ett xxx-svar.
- Komprimerad 2xx:Totalt antal 2xx-svar som komprimerades, om komprimering har aktiverats. Den visar också procentandelen förfrågningar som komprimerades.
- Andra svar:Totalt antal HTTP-förfrågningar som fick ett svar som inte täcks av de andra mätvärdena.
- Fångade förfrågningar:Totalt antal förfrågningar som avlyssnas och omdirigeras till sidan HAProxy Stats.
Kolumnerna "LbTot" och "Sista" används inte i det här avsnittet.
Backend
Det här avsnittet visar antalet aktuella anslutningar till någon av de aktiva servrarna.
Kolumnen "Cur" listar antalet aktiva anslutningar till en server. Kolumnen "Max" visar de flesta anslutningar som någonsin har upprättats samtidigt till den givna servern. Kolumnen "Begränsning" visar det maximala antalet tillåtna anslutningar för en server, som ställts in av parametern maxconn på en serverlinje.
Backend-raden visar värdet på fullconn för "Limit" eller, om den inte är inställd, använder den följande formel:Summan av sessionsgränsvärdena för gränssnitt som leder till denna backend, dividerat med 10. Kolumnen "Totalt" visar det kumulativa antalet anslutningar som har använt den givna servern. När du håller muspekaren över det här fältet visar sidan följande mätvärden:
- Cum. sessioner:Sammanlagt antal anslutningar som upprättats till denna server.
- Cum. HTTP-svar:Kumulativt antal HTTP-svar som tagits emot från denna server.
- HTTP xxx-svar:Totalt antal HTTP xxx-svar från denna server.
- Övriga svar:Totalt antal HTTP-svar som inte täcks av de andra mätvärdena.
- Kötid:Mängden tid i millisekunder som en anslutning låg i kö medan den väntade på en anslutningsplats till servern, i genomsnitt över de senaste 1024 lyckade anslutningarna.
- Anslutningstid:Tiden i millisekunder som det tog att ansluta till servern, i genomsnitt över de senaste 1024 lyckade anslutningarna.
- Svarstid:Serverns svarstid i millisekunder, i genomsnitt över de senaste 1024 lyckade anslutningarna.
- Total tid:Den totala sessionstiden i millisekunder, i genomsnitt över de senaste 1024 lyckade anslutningarna.
Kolumnen "LbTot" visar det totala antalet gånger den givna servern valdes för att betjäna en begäran. Detta kan bero på normal belastningsbalansering eller på en omsändning från en felaktig server. Kolumnen "Sista" visar tiden sedan den senaste anslutningen togs emot.
Byte
Frontend
Det här avsnittet visar den kumulativa mängden data som skickas och tas emot mellan HAProxy och klienter. Kolumnen "In" visar det totala antalet mottagna byte och kolumnen "Ut" visar det totala antalet skickade byte.
Backend
Det här avsnittet visar mängden data som skickas och tas emot mellan HAProxy och servern. Kolumnen "In" visar antalet byte som skickats till servern. Kolumnen "Ut" visar antalet byte som tagits emot tillbaka.
Nekade
Den visar antalet förfrågningar och svar som avvisades på grund av säkerhetsproblem i både Frontend- och Backend-sektionerna.
Frontend
Kolumnen "Req" visar antalet förfrågningar som nekades på grund av konfigurationsdirektiv (http-request deny, http-request reject, etc) placerade i Frontend- eller Listen-sektionen.
Kolumnen "Resp" visar antalet svar som nekades av ett http-response deny-direktiv som placerades i en frontend eller lyssna.
Backend
Kolumnen "Req" gäller endast backend som helhet. Den visar antalet förfrågningar som avvisades av konfigurationsdirektiv (http-request deny, http-request reject, etc) i en backend.
Kolumnen "Resp" visar antalet svar som avvisades för en viss server på grund av konfigurationsdirektiv för http-response deny eller tcp-response content refject i en backend.
Fel
Frontend
Endast kolumnen "Req" används här. Den visar antalet förfrågningar som stötte på ett fel.
Möjliga orsaker inkluderar:
- Tidig uppsägning från klienten
- Ett läsfel från klienten
- Klienten fick timeout
- Klienten stängde anslutningen
- Klienten skickade en felaktig begäran
- Förfrågan var tarpiterad
Backend
Den visar antalet fel relaterade till kommunikation med en backend-server.
Kolumnen "Req" används inte. Kolumnen "Conn" visar antalet förfrågningar som stötte på ett fel när du försökte ansluta till servern. Kolumnen "Resp" visar fel som påträffades när svaret hämtades.
Varningar
Backend
Endast för backends. Det här avsnittet visar antalet återförsök och återutskick. Om du har lagt till ett återförsöksdirektiv till din backend, visar kolumnen "Retr" det totala antalet gånger som en anslutning försökte på nytt. Kolumnen "Redis" visar antalet gånger som HAProxy misslyckades med att upprätta en anslutning till en server och skickade om den till en annan server. Detta kräver att du har lagt till ett alternativ omsändningsdirektiv.
Server
Frontend
Det enda fältet från det här avsnittet som gäller för ett gränssnitt är fältet Status. När status är ÖPPEN fungerar frontend normalt och redo att ta emot trafik.
Backend
Det här avsnittet visar information om status, hälsa och vikt för varje server. Kolumnen "Status" visar om servern för närvarande är uppe och hur länge. Den kan visa någon av följande statusar:
- UPP:Servern rapporterar som frisk.
- NER:Servern rapporterar som ohälsosam och kan inte ta emot förfrågningar.
- NOLB:Du har lagt till http-check disable-on-404 i backend och den hälsokontrollerade webbadressen har returnerat ett HTTP 404-svar.
- UNDERHÅLL:Servern har inaktiverats eller satts i underhållsläge.
- DRAIN:Servern har satts i dräneringsläge.
- ingen kontroll:Hälsokontroller är inte aktiverade för den här servern.
Kolumnen "LastChk" visar ett värde som L7OK/200 i Xms. Det värdet betyder att en hälsokontroll av lager 7 utfördes; det returnerade ett HTTP 200 OK-svar och det gjorde det inom X millisekund.
Kolumnen "Wght" visar andelen trafik som den kommer att acceptera, enligt viktparametern på serverraden. Kolumnen "Act" visar om servern är aktiv (markerad med ett Y) eller en backup (markerad med en -). Kolumnen "Bck" visar om servern är en backup (markerad med ett Y) eller aktiv (markerad med en -).
Kolumnen "Chk" visar antalet misslyckade hälsokontroller. Kolumnen "Dwn" visar antalet övergångar från UPP till NED. Kolumnen "Dwntme" visar hur länge servern har varit nere.
Om du har lagt till en slowstart-parameter till en serverlinje, när du inaktiverar och senare aktiverar den servern, visar kolumnen "Thrtle" den procentandel av trafik som servern accepterar. Procentandelen kommer gradvis att stiga till 100 % under den period du har ställt in.
Denna information är baserad på ett HAProxy-blogginlägg som du kan hänvisa till för mer detaljerad information.
HAProxy på ClusterControl
Förutom driftsättning och hantering ger ClusterControl också insikt i HAProxy-statistik och realtidsdashboards från användargränssnittet. Från ClusterControl kan du komma åt statistiksidan på ClusterControl -> Välj Cluster -> Noder -> välj HAProxy-noden som liknar skärmdumpen nedan:
Du kan aktivera/inaktivera en server från belastningsbalanseringen genom att bocka/avmarkera kryssrutan under kolumnen "Aktiverad". Detta är mycket användbart när du vill att din applikation avsiktligt ska hoppa över anslutningen till en server, t.ex. för underhåll eller för att testa och validera nya konfigurationsparametrar eller optimerade frågor.
Du kan också övervaka dina HAProxy-servrar från ClusterControl genom att kolla avsnittet Dashboard.
För att aktivera det behöver du bara gå till ClusterControl -> Välj Cluster -> Dashboards -> Aktivera agentbaserad övervakning. Detta kommer att distribuera en agent på varje nod för att få all information för att generera motsvarande grafer.
Här ser du inte bara all nödvändig statistik för att övervaka HAProxy-noden, utan också för att övervaka hela miljön med hjälp av de olika instrumentpanelerna.
Slutsats
HAProxy är ett bra och kraftfullt verktyg för att förbättra din databas och applikationsprestanda. Det är också användbart att lägga till High Availability och Failover i din miljö. För att veta vad som händer i din HAProxy-nod måste du förstå mätvärdena som övervakas på statistiksidan, eller till och med förbättra denna övervakning genom att lägga till en instrumentpanel för att göra den mer användarvänlig.
I den här bloggen har vi förklarat varje mätvärde som nämns på HAProxy-statistiksidan, och vi visade också hur det ser ut på ClusterControl, där du kan komma åt både statistik och instrumentpanels HAProxy-sektioner från samma system.