Ecco come Redis Cluster gestisce gli errori dei nodi:
Failover automatico
Quando un nodo master del cluster Redis fallisce, il cluster promuoverà automaticamente uno dei nodi di replica affinché quel master diventi il nuovo master. Questo processo di failover avviene automaticamente senza alcun intervento manuale.
I passaggi chiave del processo di failover sono:
1. Gli altri nodi nel cluster rilevano che il nodo master non è riuscito, tramite il protocollo gossip del cluster o tentando di connettersi al nodo.
2. Il cluster tiene quindi un'elezione tra i nodi di replica per quel master. La replica con i dati più aggiornati viene eletta come nuovo master.
3. Il nodo di replica eletto viene promosso a nuovo master. Le altre repliche vengono quindi riconfigurate per replicarsi dal nuovo master.
4. I client vengono reindirizzati al nuovo nodo master utilizzando la risposta di errore "MOVED", che contiene la nuova mappatura da slot a nodo.
Copertura degli slot
Per rimanere disponibile durante i guasti dei nodi, Redis Cluster richiede che la maggior parte dei nodi master siano disponibili e in grado di comunicare. Questo è noto come mantenimento della "copertura dello slot".
Ciascun nodo master nel cluster è responsabile di un sottoinsieme dei 16.384 slot hash. Finché la maggior parte dei master è disponibile e può servire gli slot assegnati, il cluster può continuare a funzionare.
Se troppi nodi master si guastano in modo tale che i master rimanenti non possano coprire l'intero intervallo di slot hash, il cluster non sarà più disponibile finché i nodi guasti non verranno ripristinati o sostituiti.
Promozione repliche
Redis Cluster si affida ai nodi di replica per fornire elevata disponibilità. Quando un master fallisce, uno dei suoi nodi di replica viene automaticamente promosso a nuovo master.
La replica con i dati più aggiornati viene eletta come nuovo master. Ciò garantisce che la coerenza dei dati venga mantenuta durante il processo di failover.
Gestire il cervello diviso
Redis Cluster utilizza un approccio basato sul quorum per gestire le partizioni di rete ed evitare scenari "split-brain" in cui il cluster viene diviso in più cluster indipendenti.
Se la maggior parte dei master non è più disponibile, i nodi rimanenti rifiuteranno le richieste del client finché la partizione non verrà risolta. Ciò garantisce che la coerenza dei dati venga preservata.
Sfruttando questi meccanismi di failover automatico e basati sul quorum, Redis Cluster è in grado di fornire disponibilità elevata e resilienza in caso di guasti dei nodi e partizioni di rete.
Citazioni:[1] https://yifan-online.com/it/km/article/detail/16750
[2] https://stackoverflow.com/questions/63878562/two-failure-support-in-3-node-redis-cluster
[3] https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/
[4] https://redis.io/docs/latest/commands/cluster-nodes/
[5] https://github.com/lettuce-io/lettuce-core/issues/2318