MySQL High Availability è un'opzione attivabile in modo che il database MySQL resti disponibile in caso di guasto o interruzione. Questa funzionalità consente di impostare requisiti superiori per il tempo di attività e una tolleranza alla perdita dei dati pari a zero. In questo articolo descriveremo il concetto generale di alta disponibilità e come funziona l'opzione MySQL High Availability.
Cos'è l'alta disponibilità?
Con alta disponibilità si intende la capacità di un sistema o servizio di funzionare e restare disponibile anche in caso di guasto o interruzione. In un'architettura ad alta disponibilità, quindi, i sistemi e le applicazioni mission critical di un'organizzazione sono sempre attivi e in funzione. È particolarmente importante per le aziende dei settori sanitario, finanziario e aeronautico, dove il guasto di un sistema mission critical potrebbe comportare gravi conseguenze.
L'alta disponibilità è espressa in percentuale in base al tempo di attività e definita nei Service Level Agreement (SLA): 100 è il valore massimo per indicare un sistema che non si guasta mai. Essendo un valore praticamente irraggiungibile, la maggior parte delle organizzazioni punta a ottenere una disponibilità a "cinque nove", ossia del 99,999%.
Come MySQL raggiunge l'alta disponibilità
Un sistema altamente disponibile deve essere in grado di rientrare subito in funzione quando si verifica un guasto. Per assicurare la ripristinabilità e l'alta disponibilità, sono necessari almeno tre fattori basilari:
Rilevamento dei guasti
L'opzione High Availability di MySQL consente alle applicazioni di soddisfare i requisiti per un maggiore tempo di attività e una tolleranza zero alle perdite dei dati. Quando questa opzione è attiva, il sistema MySQL crea tre istanze in diversi domini di errore o zone di disponibilità.
I dati vengono replicati in queste tre istanze utilizzando la funzione MySQL Group Replication e le applicazioni si collegano all'istanza primaria per la lettura e la scrittura dei dati da e verso il database. In caso di guasto, il sistema attiva il failover automatico sulla seconda istanza nel giro di pochi minuti.
Failover
Il meccanismo di failover permette di trasferire i servizi a un'istanza replicata. Se sono disponibili più istanze di backup, il meccanismo di failover sceglie quella più adatta promuovendola a nodo primario.
Meccanismo di reindirizzamento
Dopo il failover sull'istanza secondaria, l'alta disponibilità reindirizza tutti i collegamenti di applicazioni e utenti al nuovo nodo primario, reindirizzando inoltre tutte le query dal precedente nodo primario al nuovo database primario.
MySQL High Availability: tempo di attività
Con tempo di attività si intende il tempo durante il quale un sistema è disponibile e funziona correttamente. È espresso in percentuale in base al tempo totale di operatività previsto. Se la percentuale è alta, vuol dire che il sistema è disponibile e funziona correttamente per la maggior parte del tempo previsto.
Il tempo di attività associato ai diversi livelli di MySQL High Availability dipenderà dalla soluzione di alta disponibilità (HA) implementata.
MySQL Replication
MySQL Replication consente di configurare più server per fornire ridondanza e failover in modo da supportare tempi di attività più elevati rispetto a un server senza funzionalità HA. La configurazione di server master-slave comprende un server master che accetta operazioni di lettura e scrittura o più server slave di sola lettura. I dati del server master vengono replicati in modo asincrono nei server slave.
Per implementare il failover è necessario configurare uno o più server slave di stand-by in modo che possano essere innalzati a livello master in caso di guasto. Il failover consiste in un processo manuale in cui è necessario innalzare di livello il nodo slave a nodo master modificando lo stato del nodo passato alla modalità di lettura-scrittura affinché possa accettare le query.
Poiché il failover è un'operazione manuale, richiede più tempo e potrebbe dare luogo a errori umani, prolungando l'interruzione. MySQL Replication utilizza anche la replica asincrona: se il server master dovesse subire un guasto, le operazioni confermate su quest'ultimo potrebbero non essere state ancora replicate sui server slave. In caso di perdita di dati cruciali, questi dovranno essere ripristinati, prolungando i tempi di fermo.
MySQL Group Replication
Con MySQL Group Replication si possono raggiungere tempi di attività superiori rispetto alla replica semplice. MySQL Group Replication, infatti, permette di configurare più server MySQL in un gruppo, dove un server funge da nodo primario e gli altri da nodi secondari. Ogni server nel gruppo conserva una copia dei dati e utilizza la replica per garantire che le copie siano sincronizzate.
Se il server primario va fuori uso, i server secondari nel gruppo rilevano automaticamente il guasto e avviano il processo di failover. Uno dei server secondari viene promosso automaticamente a nuovo server primario e comincia a rispondere alle richieste dei client. Gli altri server secondari ricevono gli aggiornamenti dal nuovo server primario e continuano a elaborare le richieste di lettura dei client.
Quando il server guasto ritorna online, rientra automaticamente nel gruppo come server secondario.
Poiché con MySQL Group Replication i meccanismi di rilevamento dei guasti e failover si attivano automaticamente, il downtime è minimo e viene a malapena rilevato da utenti e applicazioni.
MySQL Cluster
La soluzione HA MySQL Cluster offre il massimo tempo di attività. Questo sistema di database distribuito altamente disponibile, con failover e bilanciamento del carico automatici, offre disponibilità, performance e scalabilità elevate ed è progettato per un downtime quasi pari a zero.
MySQL Cluster utilizza tre tipi di nodi che interagiscono per archiviare e gestire i dati:
- Nodi di dati: archiviano i dati e gestiscono le query di lettura e scrittura.
- Nodi di server MySQL: ricevono le query dalle applicazioni client, le elaborano sui nodi di dati e quindi restituiscono il risultato ai client.
- Nodi di gestione: gestiscono il funzionamento del cluster e le operazioni di failover e ripristino in caso di guasto.
Se uno o più nodi del cluster smettono di funzionare, il cluster rileva automaticamente il problema e attiva il processo di failover. Tutto avviene entro un secondo dal guasto, senza interrompere il servizio verso le applicazioni client. Il cluster continua a funzionare, praticamente senza downtime.