Mysql
 sql >> Database >  >> RDS >> Mysql

Comprendere le statistiche HAProxy per MySQL e PostgreSQL

Avere un Load Balancer è sempre una buona opzione per migliorare l'ambiente del database. Può aiutarti a reindirizzare le applicazioni ai nodi di database disponibili, distribuire il traffico su più server per migliorare le prestazioni o persino eseguire il failover quando richiesto. Per sapere cosa sta succedendo con il tuo traffico/sistema, devi disporre di un buon sistema di monitoraggio in atto per monitorare non solo i nodi del tuo database ma anche i tuoi bilanciatori di carico, per intraprendere azioni proattive o reattive per mitigare qualsiasi problema attuale o futuro. Per essere in grado di trovare un problema, devi capire cosa significa ogni valore che stai vedendo.

In questo blog, spiegheremo cosa significano le statistiche HAProxy e come monitorarle in modo semplice utilizzando grafici e ClusterControl.

Cos'è HAProxy?

HAProxy è un proxy open source che può essere utilizzato per implementare alta disponibilità, bilanciamento del carico e proxy per applicazioni basate su TCP e HTTP.

Come bilanciatore del carico, HAProxy distribuisce il traffico da un'origine a una o più destinazioni e può definire regole e/o protocolli specifici per questa attività. Se una qualsiasi delle destinazioni smette di rispondere, viene contrassegnata come offline e il traffico viene inviato alle altre destinazioni disponibili.

Tipi di nodi HAProxy

Quando si configura HAProxy Load Balancer, ci sono diversi tipi di nodi da configurare a seconda della funzionalità desiderata. Le opzioni sono Frontend, Backend e Ascolta.

Nodi frontali

Quando si posiziona HAProxy come proxy inverso davanti ai server backend, una sezione frontend nel file di configurazione definisce gli indirizzi IP e le porte a cui i client possono connettersi. Le richieste entrano nel sistema di bilanciamento del carico e le risposte vengono restituite al client. Passano attraverso il frontend.

frontend site1.com

     bind 10.10.10.150:80

     use_backend api_servers if { path_beg /api/ }

     default_backend web_servers

Nodi di backend

Definisce un gruppo di server che verranno bilanciati e assegnati alla gestione delle richieste, a seconda della politica selezionata. HAProxy invia le richieste a un back-end e quindi riceve una risposta da uno dei server attivi.

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

Ascolta nodi

Combina i due tipi di nodo HAProxy che abbiamo menzionato sopra. Potresti preferire la leggibilità ottenuta avendo sezioni separate di frontend e backend, o forse desideri avere una configurazione più concisa, utilizzando l'approccio di ascolto.

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

Pagina delle statistiche HAProxy

HAProxy ti consente di abilitare una pagina di statistiche con informazioni in tempo reale per vedere cosa sta succedendo nel tuo Load Balancer. Per abilitare la pagina delle statistiche, è sufficiente utilizzare la direttiva "stats enable" nel file di configurazione HAProxy (/etc/haproxy/haproxy.cfg). Vediamo un esempio:

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

La riga di collegamento imposta l'indirizzo IP e la porta che utilizzerai per accedere alla pagina delle statistiche. Puoi anche configurare l'autenticazione e un periodo di aggiornamento. Se accedi al tuo nodo HAProxy utilizzando la porta specificata (9600 nell'esempio), le credenziali admin/admin, vedrai qualcosa del genere:

Qui troverai diverse metriche utili per monitorare il tuo nodo HAProxy.

Statistiche HAProxy

Ora, vediamo quali sono queste metriche. Poiché il significato dipende dal contesto, lo divideremo in Frontend e Backend.

Coda

Backend

Questa sezione si applica solo ai backend e mostra per quanto tempo i client aspettano che un server diventi disponibile. HAProxy è in grado di mettere in coda le connessioni quando si utilizza l'impostazione maxconn.

La colonna "Cur" mostra il numero di connessioni client che sono attualmente in coda e non ancora assegnate a un server. La colonna "Max" mostra il maggior numero di connessioni mai messe in coda contemporaneamente. La colonna "Limite" mostra il numero massimo di connessioni che possono essere accodate, come definito dall'impostazione maxqueue su ciascuna riga del server nel file di configurazione.

Tasso di sessione

Fronte

Descrive la velocità con cui i client si connettono a HAProxy.

La colonna "Cur" mostra la velocità con cui vengono create le sessioni client o le connessioni completamente stabilite tra client e server. Se passi il mouse su questo campo, la pagina mostra le seguenti metriche:

  • Velocità di connessione corrente:la velocità con cui i client si connettono a HAProxy.
  • Tasso di sessione corrente: il tasso di creazione delle sessioni, che sono entità che mantengono lo stato di una connessione end-to-end.
  • Tasso di richiesta corrente:il tasso di ricezione delle richieste HTTP su connessioni stabilite.

La colonna "Max" mostra il maggior numero di sessioni mai utilizzate simultaneamente. Se passi il mouse su questo campo, la pagina mostra le seguenti metriche:

  • Massima velocità di connessione:la velocità massima con cui i client si sono connessi a HAProxy.
  • Tasso di sessione massimo:il tasso più alto con cui i client hanno stabilito sessioni, che sono entità che mantengono lo stato di una connessione end-to-end.
  • Massima velocità di richiesta:la più alta velocità con cui sono state ricevute richieste HTTP su connessioni stabilite.

La colonna "Limite" mostra il numero massimo di sessioni al secondo che il frontend accetterà, come impostato dall'impostazione delle sessioni con limite di velocità. Se questo limite viene superato, le connessioni aggiuntive rimangono in sospeso nel backlog del socket.

Backend

Queste statistiche mostrano la velocità con cui vengono effettuate le connessioni a un server.

La colonna "Cur" mostra la velocità corrente, al secondo, alla quale vengono stabilite le connessioni al server. La colonna "Max" mostra la velocità più alta con cui sono mai state stabilite connessioni al server specificato. La colonna "Limite" non viene utilizzata qui.

Sessioni

Fronte

Questa sezione conta il numero di sessioni, o connessioni complete da client a server, in uso sul sistema di bilanciamento del carico.

La colonna "Cur" mostra il numero corrente di sessioni stabilite. La colonna "Max" mostra il maggior numero di sessioni mai stabilite contemporaneamente. La colonna "Limite" mostra le sessioni più simultanee consentite, come definito dall'impostazione maxconn nel frontend. Quel particolare frontend smetterà di accettare nuove connessioni quando verrà raggiunto questo limite. Se maxconn non è impostato, "Limit" è lo stesso del valore maxconn nella sezione globale della configurazione. Se non è impostato, il valore è basato sul tuo sistema. Quando passi il mouse sulla colonna "Totale", la pagina mostra le seguenti metriche:

  • Sborra. connessioni:numero cumulativo di connessioni stabilite dall'ultimo ricaricamento di HAProxy.
  • Sborra. sessioni:numero cumulativo di sessioni (connessioni end-to-end) stabilite dall'ultimo ricaricamento.
  • Sborra. Richieste HTTP:numero cumulativo di richieste HTTP dall'ultimo ricaricamento.
  • Risposte HTTP xxx:numero totale di richieste HTTP che hanno ricevuto una risposta xxx.
  • Compresso 2xx:numero totale di 2xx risposte che sono state compresse, se la compressione è stata abilitata. Mostra anche la percentuale di richieste che sono state compresse.
  • Altre risposte:numero totale di richieste HTTP che hanno ricevuto una risposta non coperta dalle altre metriche.
  • Richieste intercettate:numero totale di richieste intercettate e reindirizzate alla pagina HAProxy Stats.

Le colonne "LbTot" e "Last" non vengono utilizzate in questa sezione.

Backend

Questa sezione mostra il numero di connessioni correnti a qualsiasi server attivo.

La colonna "Cur" elenca il numero di connessioni attive a un server. La colonna "Max" mostra il maggior numero di connessioni mai stabilite contemporaneamente al server specificato. La colonna "Limite" mostra il numero massimo di connessioni consentite per un server, come impostato dal parametro maxconn su una riga del server.

La riga del backend mostra il valore di fullconn per "Limit" o, se non impostato, utilizza la seguente formula:Somma delle sessioni Valori limite per i frontend che instradano a questo backend, diviso per 10. La colonna "Totale" mostra il numero cumulativo di connessioni che hanno utilizzato il server specificato. Quando passi il mouse su questo campo, la pagina mostra le seguenti metriche:

  • Sborra. sessioni:numero cumulativo di connessioni stabilite a questo server.
  • Sborra. Risposte HTTP:numero cumulativo di risposte HTTP ricevute da questo server.
  • Risposte HTTP xxx:numero totale di risposte HTTP xxx da questo server.
  • Altre risposte:numero totale di risposte HTTP non coperte dalle altre metriche.
  • Tempo di coda:la quantità di tempo in millisecondi in cui una connessione è rimasta in coda durante l'attesa di uno slot di connessione al server, in media sulle ultime 1024 connessioni riuscite.
  • Tempo di connessione:il tempo in millisecondi impiegato per connettersi correttamente al server, calcolato in media sulle ultime 1024 connessioni riuscite.
  • Tempo di risposta:il tempo di risposta del server in millisecondi, mediato sulle ultime 1024 connessioni riuscite.
  • Tempo totale:il tempo totale della sessione in millisecondi, mediato sulle ultime 1024 connessioni riuscite.

La colonna "LbTot" mostra il numero totale di volte in cui il server specificato è stato selezionato per soddisfare una richiesta. Ciò può essere dovuto al normale bilanciamento del carico oa una nuova spedizione da un server guasto. La colonna "Ultima" mostra il tempo trascorso dall'ultima connessione ricevuta.

Byte

Fronte

Questa sezione mostra la quantità cumulativa di dati inviati e ricevuti tra HAProxy e client. La colonna "In" mostra il numero totale di byte ricevuti e la colonna "Out" mostra il numero totale di byte inviati.

Backend

Questa sezione mostra la quantità di dati inviati e ricevuti tra HAProxy e il server. La colonna "In" mostra il numero di byte inviati al server. La colonna "Out" mostra il numero di byte ricevuti indietro.

Negato

Mostra il numero di richieste e risposte che sono state rifiutate a causa di problemi di sicurezza nelle sezioni Frontend e Backend.

Fronte

La colonna "Req" mostra il numero di richieste che sono state rifiutate a causa di direttive di configurazione (http-request deny, http-request require, ecc.) poste nella sezione Frontend o Listen.

La colonna "Resp" mostra il numero di risposte che sono state negate da una direttiva http-response deny che è stata inserita in un frontend o in un listen.

Backend

La colonna "Req" si applica solo al back-end nel suo insieme. Mostra il numero di richieste che sono state rifiutate dalle direttive di configurazione (http-richiesta negata, http-richiesta rifiutata, ecc.) in un back-end.

La colonna "Resp" mostra il numero di risposte che sono state rifiutate per un determinato server a causa delle direttive di configurazione http-response deny o tcp-response content rifiuto in un back-end.

Errori

Fronte

Qui viene utilizzata solo la colonna "Req". Mostra il numero di richieste che hanno riscontrato un errore.

Possibili cause includono:

  • Risoluzione anticipata dal cliente
  • Un errore di lettura dal client
  • Il client è scaduto
  • Il client ha chiuso la connessione
  • Il client ha inviato una richiesta non corretta
  • La richiesta è stata tarpitted

Backend

Mostra il numero di errori relativi alla comunicazione con un server back-end.

La colonna "Req" non viene utilizzata. La colonna "Conn" mostra il numero di richieste che hanno riscontrato un errore durante il tentativo di connessione al server. La colonna "Resp" mostra gli errori riscontrati durante la ricezione della risposta.

Avvertenze

Backend

Solo per i backend. In questa sezione viene visualizzato il numero di tentativi e rispedizioni. Se hai aggiunto una direttiva per i tentativi al tuo back-end, la colonna "Retr" mostra il numero totale di volte in cui una connessione è stata ritentata. La colonna "Redis" mostra il numero di volte in cui HAProxy non è riuscito a stabilire una connessione a un server e l'ha rispedito a un altro server. Ciò richiede che tu abbia aggiunto una direttiva di redispatch dell'opzione.

Server

Fronte

L'unico campo di questa sezione che si applica a un frontend è il campo Stato. Quando Status è APERTO, il frontend funziona normalmente ed è pronto a ricevere traffico.

Backend

Questa sezione mostra i dettagli sullo stato, l'integrità e il peso di ciascun server. La colonna "Stato" mostra se il server è attualmente attivo e per quanto tempo. Può visualizzare uno qualsiasi dei seguenti stati:

  • UP:il server sta segnalando come integro.
  • DOWN:il server segnala come non integro e non è in grado di ricevere richieste.
  • NOLB:hai aggiunto http-check disable-on-404 al back-end e l'URL del controllo di integrità ha restituito una risposta HTTP 404.
  • MAINT:il server è stato disabilitato o messo in modalità manutenzione.
  • DRAIN:il server è stato messo in modalità drain.
  • nessun controllo:i controlli di integrità non sono abilitati per questo server.

La colonna "LastChk" mostra un valore come L7OK/200 in Xms. Quel valore significa che è stato eseguito un controllo dello stato di livello 7; ha restituito una risposta HTTP 200 OK e lo ha fatto entro X millisecondi.

La colonna "Wght" mostra la proporzione di traffico che accetterà, come impostato dal parametro peso sulla riga del server. La colonna "Act" mostra se il server è attivo (contrassegnato con una Y) o un backup (contrassegnato con un -). La colonna "Bck" mostra se il server è un backup (contrassegnato da una Y) o attivo (contrassegnato da un -).

La colonna "Chk" mostra il numero di controlli sanitari falliti. La colonna “Dwn” mostra il numero di transizioni da UP a DOWN. La colonna "Dwntme" mostra da quanto tempo il server è rimasto inattivo.

Se hai aggiunto un parametro slowstart a una linea di server, quando disabiliti e successivamente abiliti quel server, la colonna "Thrtle" mostra la percentuale di traffico che il server accetterà. La percentuale aumenterà gradualmente fino al 100% nel periodo che hai impostato.

Queste informazioni si basano su un post del blog HAProxy a cui puoi fare riferimento per informazioni più dettagliate.

HAProxy su ClusterControl

Oltre alla distribuzione e alla gestione, ClusterControl fornisce anche informazioni dettagliate sulle statistiche HAProxy e sui dashboard in tempo reale dall'interfaccia utente. Da ClusterControl, puoi accedere alla pagina delle statistiche in ClusterControl -> Seleziona Cluster -> Nodi -> scegli il nodo HAProxy simile allo screenshot seguente:

Puoi abilitare/disabilitare un server dal bilanciamento del carico spuntando/deselezionando il pulsante della casella di controllo nella colonna "Abilitato". Ciò è molto utile quando desideri che la tua applicazione salti intenzionalmente la connessione a un server, ad esempio per la manutenzione o per testare e convalidare nuovi parametri di configurazione o query ottimizzate.

Puoi anche monitorare i tuoi server HAProxy da ClusterControl controllando la sezione Dashboard.

Per abilitarlo, devi solo andare su ClusterControl -> Seleziona Cluster -> Dashboard -> Abilita monitoraggio basato su agente. Questo distribuirà un agente su ogni nodo per ottenere tutte le informazioni per generare i grafici corrispondenti.

Qui non vedrai solo tutte le metriche necessarie per monitorare il nodo HAProxy, ma anche per monitorare tutto l'ambiente utilizzando le diverse dashboard.

Conclusione

HAProxy è uno strumento valido e potente per migliorare le prestazioni del database e delle applicazioni. È anche utile aggiungere High Availability e Failover al tuo ambiente. Per sapere cosa sta succedendo nel tuo nodo HAProxy, devi comprendere le metriche che vengono monitorate nella pagina delle statistiche o persino migliorare questo monitoraggio aggiungendo una dashboard per renderlo più semplice.

In questo blog, abbiamo spiegato ogni metrica menzionata nella pagina delle statistiche HAProxy e abbiamo anche mostrato come appare su ClusterControl, dove puoi accedere sia alle sezioni HAProxy delle statistiche che dei dashboard dallo stesso sistema.