Il cluster Redis gestisce i guasti del nodo attraverso una combinazione di rilevamento di guasti, promozione di replica e gestione dello stato del cluster per garantire il funzionamento continuo e la disponibilità dei dati. È progettato per sopravvivere ai guasti di alcuni nodi promuovendo automaticamente le repliche per sostituire i maestri irraggiungibili, mantenendo l'integrità dello spazio chiave minimizzando i rischi per la perdita di dati.
comunicazione cluster e rilevamento di errori
I nodi del cluster Redis comunicano tramite un protocollo binario basato su TCP dedicato chiamato Bus Cluster Redis. Ogni nodo mantiene connessioni con ogni altro nodo nel cluster usando questo bus, consentendo controlli di salute continui e propagazione dello stato. I nodi inviano periodicamente i pacchetti di ping per confermare lo stato operativo dei loro coetanei e condividere informazioni sullo stato del cluster. Questa comunicazione utilizza un protocollo di gossip per diffondere in modo efficiente informazioni sui cluster, aiutando nel rilevamento di guasti al nodo.
I nodi monitorano i peer utilizzando un meccanismo di ping attivo. Se un nodo non risponde ai ping entro un periodo di timeout configurato (node_timeout), viene contrassegnato come eventualmente guasto con uno stato Pfail. Questa è un'indicazione di fallimento provvisorio, il che significa che il nodo potrebbe essere irraggiungibile o giù ma non è ancora confermato. Se la condizione Pfail persiste ed è confermata dalla maggioranza dei nodi principali, il nodo è contrassegnato come fallimento, indicando che è considerato irraggiungibile o giù dal cluster. Questo meccanismo di rilevamento del fallimento basato sul consenso aiuta a prevenire falsi positivi nell'identificare i nodi falliti.
Gestione dei guasti del nodo principale
Quando un nodo principale viene contrassegnato come fallimento, Redis Cluster avvia un processo di failover per promuovere una delle sue repliche per diventare il nuovo maestro. Questo processo viene attivato automaticamente dal rivelatore di guasto del cluster senza intervento amministrativo. La replica promossa assume la responsabilità di servire le slot di hash precedentemente gestite dal maestro fallito, garantendo che il cluster possa continuare a servire le richieste senza riconfigurazione manuale.
Il failover si verifica solo se è disponibile almeno una replica e raggiungibile. Se non esiste alcuna replica adeguata, il cluster inserisce uno stato di errore in cui smetterà di accettare le query per impedire a servire dati incoerenti. Ciò evidenzia l'importanza di configurare le repliche per ciascun master per mantenere un'alta disponibilità.
meccanica di failover e sicurezza
Durante il failover, la replica attende di sincronizzare completamente con il master sta sostituendo, assicurando che abbia elaborato tutti gli aggiornamenti in sospeso per evitare la perdita di dati. Lo raggiunge abbinando l'offset della replica con il master in modo che abbia un set di dati aggiornato prima di assumere il ruolo principale.
Una volta sincronizzata, la replica richiede una nuova epoca di configurazione dalla maggior parte dei maestri. L'epoca è un timestamp logico utilizzato per tracciare le modifiche alla configurazione nel cluster. Dopo aver ottenuto il consenso, la replica trasmette la configurazione aggiornata a tutti i nodi, annunciando la sua promozione al padrone e la degradazione del vecchio maestro alla replica o alla rimozione.
Il vecchio maestro, quando recupera, riceve questo aggiornamento di configurazione e smette di servire le query come master. Reindirizza le richieste dei clienti al nuovo master, garantendo che i clienti continuino a interagire con il cluster senza intervento manuale.
Gestione delle partizioni di rete e scenari di cervello diviso
Redis Cluster utilizza il consenso basato sulla maggioranza per evitare problemi di divisione del cervello durante le partizioni di rete. Un maestro non sarà fallito solo se è irraggiungibile da più della metà dei maestri nel cluster. I maestri che non possono comunicare con la maggioranza smetteranno di accettare le scritture, prevenendo stati di dati divergenti tra le partizioni.
Tuttavia, se una partizione di minoranza contiene clienti che continuano a scrivere a un master prima del failover, c'è un potenziale per la perdita di scrittura. Redis mitiga questo rischio rifiutando le scritture sul lato delle minoranze dopo un timeout e dalla maggioranza fallendo rapidamente sul maestro irraggiungibile.
Nonostante queste precauzioni, le scritture possono essere perse durante le finestre di failover perché Redis utilizza una replica asincrona tra master e repliche. Poiché le risposte ai comandi di scrittura e gli aggiornamenti di replica vengono inviati quasi contemporaneamente, la finestra per perdere le scritture è molto stretta ma non impossibile.
opzioni di configurazione che influiscono sulla gestione degli errori
Il cluster Redis include opzioni di configurazione che influenzano la disponibilità e il comportamento durante i guasti del nodo:
-`cluster-richiedere-full-coverage` (predefinito sì): il cluster smette di accettare le scritture se una parte dello spazio chiave viene scoperta a causa di guasti al nodo, garantendo una forte coerenza dei dati.
-`cluster-tolo-reads-when-down` (no predefinito): controlla se le letture sono consentite quando il cluster è in uno stato di errore. Abilitare ciò consente le letture dai nodi anche durante guasti parziali, ma può rischiare che i dati stantii vengono serviti.
Queste impostazioni consentono agli amministratori di bilanciare la disponibilità e la coerenza in base ai requisiti dell'applicazione.
Supporto di failover manuale ###
Oltre al failover automatico, Redis Cluster fornisce un comando di failover manuale che può essere emesso sui nodi replica. Ciò è utile per gli scenari di manutenzione o test in cui un amministratore desidera scambiare ruoli master senza attendere un effettivo evento di fallimento.
Il failover manuale funziona bloccando i clienti sull'attuale maestro, in attesa che la replica raggiunga completamente, quindi promuovendo la replica con una transizione atomica regolare. Ciò garantisce alcuna perdita di dati durante il cambiamento di ruolo e l'interruzione minima per i clienti.
Riepilogo
Il cluster Redis gestisce i guasti del nodo principalmente attraverso un sistema di rilevamento degli guasti e failover in base al monitoraggio continuo tramite il bus cluster Redis e un protocollo di gossip. I nodi rilevano i maestri irraggiungibili e promuovono automaticamente le repliche dopo un processo di consenso che richiede la maggioranza dei maestri per concordare il fallimento. Il failover è progettato per ridurre al minimo la perdita di dati assicurando che le repliche siano completamente sincronizzate prima della promozione. Le partizioni di rete sono gestite tramite decisioni basate sulla maggioranza per prevenire le condizioni del cervello diviso, sebbene possa verificarsi una finestra ristretta di perdita di scrittura a causa della replica asincrona. Le opzioni di configurazione consentono la messa a punto della disponibilità rispetto alla coerenza durante i guasti e i comandi di failover manuali forniscono agli operatori il controllo per la manutenzione.
Questa architettura consente al cluster Redis di fornire un'elevata disponibilità e tolleranza alla partizione con il recupero automatico dai guasti del nodo principale, garantendo che il cluster rimane operativo e coerente negli scenari di errore.