Cervello diviso
In un sistema distribuito, un cluster "split brain" si verifica quando un singolo cluster si divide in due o più sottocluster separati a causa del partizionamento della rete. In sostanza, "Split Brain" è una terminologia basata su un'analogia con la sindrome medica dello "Split Brain". Questa condizione descrive l'incoerenza nei dati o nella loro disponibilità che può derivare dalla gestione di due set di dati separati con sovrapposizione di ambito. Ciò può essere dovuto ai server in una progettazione di rete o a una condizione di errore che può essere causata da una comunicazione errata e dalla desincronizzazione dei dati tra i server corrispondenti nella rete. Questa condizione è anche comunemente definita "partizione di rete".
Dal NCache è anche un cache distribuita che può comprendere più nodi e cluster, il verificarsi di un cluster Split Brain è anche una possibilità con NCache.
Evento di cervello diviso
Quando si verifica uno Split Brain, c'è la possibilità che si formino dei sotto-cluster. Quindi, uno dei sotto-cluster deve essere rimosso per garantire che tutti i client vengano reindirizzati a un cluster sano. Poiché la rimozione del sotto-cluster significa che i dati andranno persi, il sotto-cluster da rimuovere viene selezionato in base ai seguenti criteri:
- Nel caso in cui i sottocluster siano di dimensioni diverse, verrà rimosso il sottocluster con il minor numero di nodi. Questo per garantire una perdita di dati minima, poiché il cluster più piccolo conterrà meno dati.
- Se la dimensione dei cluster è la stessa, verrà rimosso il sottocluster il cui nodo coordinatore ha l'indirizzo IP più alto. Ad esempio, gli IP dei nodi coordinatori dei sottocluster A e B sono rispettivamente 20.200.20.11 e 20.200.20.12. In questo caso verrà rimosso il sottocluster con nodo coordinatore IP 20.200.20.12.
Approcci alla risoluzione delle controversie tra partiti
Uno Split Brain può rappresentare incoerenza dei dati o problemi di disponibilità derivanti dalla manutenzione di due set di dati separati con una sovrapposizione di ambito. Inoltre, questo può portare a problemi significativi e può rappresentare una situazione disperata per l'amministratore. Per questo motivo, è estremamente importante assicurarsi che non vi sia alcun rischio di Split Brain e corruzione dei dati.
Esistono alcuni approcci comuni per gestire il problema della partizione di rete dopo che si è verificato uno Split Brain.
- Approccio ottimista
- Approccio pessimista
Approccio ottimistaNell'approccio ottimistico, il canale di comunicazione tra i nodi viene semplicemente ripristinato, consentendo ai nodi partizionati di funzionare normalmente, temporaneamente. Questo viene fatto presupponendo che i nodi si sincronizzino automaticamente in breve tempo. Questo approccio potrebbe essere solo una soluzione di ripiego, poiché esiste sempre il rischio di corruzione dei dati nel caso di Split Brain.
Approccio pessimistaD'altro canto, l'approccio pessimistico richiede di rinunciare o semplicemente sacrificare la disponibilità dei sistemi per mantenere la coerenza dei dati. Al rilevamento di una partizione di rete, l'accesso alle sotto-partizioni viene limitato. Questo viene fatto per garantire la coerenza dei dati. In questo caso, per evitare divergenze nella cronologia, solo un componente può continuare a effettuare richieste di lettura/scrittura allo storage.
Come NCache Risolve il problema dello Split Brain e del partizionamento della rete
Quando si verifica uno Split Brain, i nodi del cluster nella rete vengono sottoposti a una serie di controlli prima di prendere decisioni importanti, come ad esempio quali nodi arrestare, riavviare, riconnettere o rimuovere dalla rete. NCache fornisce una funzionalità chiamata Recupero automatico del cervello diviso, che è disabilitato di default. Tuttavia, può essere abilitato in base alla sensibilità dei dati e ai requisiti dell'utente nel caso in cui si verifichi uno Split Brain nella rete.
NCache offre questa funzionalità solo per Partizione-Replica topologia. Per capirlo in modo approfondito, diamo un'occhiata alla connettività del cluster, Partizione-Replica topologia e scenari dietro la disconnessione del nodo.
Connettività del cluster
Due o più nodi possono connettersi e lavorare insieme per formare un cluster. Ogni nodo del cluster è chiamato membro. Un grappolo dentro NCache può essere considerato un canale di gruppo in cui i membri possono parlare tra loro inviando o ricevendo messaggi. Un cluster è sempre formato con una topologia mesh, il che significa che tutti i nodi sono interconnessi.
Ogni cluster è composto da un nodo coordinatore e dai restanti nodi non coordinatori o partecipanti. Il nodo coordinatore è il nodo più anziano, ovvero quello che è partito per primo ed è responsabile della maggior parte delle attività, come l'aggiunta o la rimozione di nodi. Ogni volta che un nodo viene aggiunto o rimosso dal cluster, ne informa il nodo coordinatore, che gestisce il resto delle operazioni per mantenere un ambiente connettibile nel cluster. Altre attività svolte dal nodo coordinatore includono la distribuzione dei bucket, l'attivazione del caricatore della cache e la manutenzione delle connessioni.
Un cluster può essere classificato come segue:
- Cluster completamente connesso
- Cluster parzialmente connesso
- Gruppo arrestato
Cluster completamente connesso
Un cluster viene definito in uno stato completamente connesso se il cluster ha n nodi e ciascun nodo nel cluster ha n-1 connessioni integre con tutti gli altri nodi. In questo stato, tutti i nodi possono comunicare tra loro, quindi è in uno stato stabile.
La figura seguente mostra un cluster completamente connesso in uno stato ideale.

Se un cluster è in uno stato completamente connesso e un nodo si unisce al cluster, diventa parte/membro del cluster corrispondente. Se un nodo abbandona il cluster o è parzialmente disconnesso, con uno o più nodi membri, forma un cluster separato. Tutti i nodi esistenti vengono informati di questo cambiamento nella rete dal nodo coordinatore. Ciò innesca il trasferimento di stato, che è finalizzato a bilanciare i dati nel nuovo cluster. In base alla topologia, le connessioni client vengono distribuite tra i nuovi nodi.
Connettività client
Se un cluster è in uno stato sano, nella topologia PoR, tutti i client sono connessi a tutti i nodi del cluster. Nel caso di Split Brain, che è rilevante per il Partizione-Replica, i client sono connessi a tutti i nodi del cluster. Se un nodo si unisce, anche i client si connettono al nuovo nodo. Se un nodo se ne va, il client può continuare a eseguire le operazioni.
Arrestato
Se un nodo abbandona il cluster correttamente, ovvero è stato arrestato e non c'è alcun processo host per il nodo corrispondente, allora il nodo è considerato arrestato (riguardo al resto del cluster). L'arresto di un nodo comporta un trasferimento di stato, che porta al bilanciamento dei dati. Questo, a sua volta, bilancia il numero di client tra il resto dei nodi. Tuttavia, questa caratteristica è specifica per Topologia replicata.
Connettività client
I clienti che erano connessi in precedenza a nodo fermato ora si collegherà agli altri nodi connessi.
Cluster parzialmente connesso
Potrebbero verificarsi situazioni in cui uno o più nodi di un cluster non sono in grado di connettersi ad altri nodi, ad esempio a causa di un problema tecnico della rete.
Supponiamo che esista un cluster completamente connesso a 3 nodi. Se si verifica un problema tecnico tale per cui due dei tre nodi possono ancora comunicare tra loro; tuttavia, il terzo nodo non può raggiungere la rete, i due nodi connessi formeranno un unico sotto-cluster, ad esempio il sotto-cluster 1. Il terzo nodo disconnesso formerà un sotto-cluster indipendente, ad esempio il sotto-cluster 2. Ciascun sotto-cluster -cluster avrà ora i suoi nodi coordinatori. In questa situazione, il cluster perde il suo stato di connessione ideale. Ora esistono due cluster, che non possono comunicare tra loro, ma sono completamente connessi all'interno dei loro sotto-cluster. Questo stato è chiamato connettività parziale di un cluster, come si può vedere nella figura seguente.

Nello scenario sopra menzionato, i nodi nel sotto-cluster 1 e nel sotto-cluster 2 sono tali che il sotto-cluster 1 è completamente connesso con se stesso e completamente disconnesso dal sotto-cluster 2, e viceversa.
In un caso più complesso, supponiamo un cluster a 5 nodi in cui un problema tecnico di rete fa sì che il nodo 5 interrompa la connessione da tutti i nodi tranne il nodo 3. In questo caso, il nodo 3 è ancora connesso al nodo 5 e il nodo 3 è ancora collegato anche al nodo 1, al nodo 2 e al nodo 4. Ora, il nodo 3 è un membro comune per il sottocluster 1 (nodo 1, nodo 4 e nodo 2) e il sottocluster 2 (nodo 5).
La figura seguente illustra la connettività parziale in corso.

Ogni cluster avviserà il nodo 3 chiedendogli di mantenere la connessione ad un solo cluster. Alla ricezione delle notifiche, il nodo 3 valuterà da dove provengono le notifiche e si connetterà al sottocluster contenente il nodo più senior, prima che avvenisse la disconnessione del cluster principale, che in questo scenario è il sottocluster 2.
La figura seguente mostra la connettività parziale di un cluster nel suo stato finale.

Tentativi di connessione
Ogni operazione di cluster ha un Valore di timeout, che è di 60 secondi per impostazione predefinita ed è configurabile in NCache Centro di gestioneOgni cluster ha Tentativi di connessione (valore predefinito 2) e Intervallo di tentativi (valore predefinito 2). Entrambi questi valori sono configurabili anche in NCache Centro di gestione.
Ogni volta che la connessione di un nodo viene interrotta da un cluster, il nodo coordinatore prevalente tenta prima di ristabilire la connessione. Se il nuovo tentativo ha come risultato una connessione riuscita e non si verifica alcun timeout, il cluster passa a uno stato normale e completamente connesso. Tuttavia, se per qualche motivo la connessione non può essere ristabilita, tutti i nodi del cluster formano più sottocluster con conseguente connettività parziale.
Nuovo nodo di unione
Se un cluster è in uno stato parzialmente connesso, qualsiasi aggiunta di un nuovo nodo verrà effettuata alla parte del sottocluster che detiene la connettività appropriata nella rete. Nel caso in cui sia connesso a entrambi i sottocluster, si unirà al sottocluster con la dimensione maggiore, ovvero il sottocluster che ha un numero maggiore di nodi. Se un numero di nodi è uguale, confronterà gli IP con il nodo Coordinator e si unirà al Coordinator con un IP maggiore.
Connettività client
In caso di connettività parziale, poiché il cluster si trova in un ambiente instabile, le applicazioni client potrebbero assumere comportamenti bruschi e incerti. Se una macchina client è connessa a entrambi i sottocluster, alcuni client potrebbero connettersi al sottocluster 1 e altri al sottocluster 2. Potrebbe esserci la possibilità che la connettività di rete sia tale che tutti i client si connettono a un sottocluster solo gruppo. Non ci sarà coerenza dei dati nemmeno nel cluster.
Strategie per la risoluzione della connettività parziale del cluster
Per risolvere il problema dello Split Brain, NCache offre opzioni di ripristino sia manuali che automatiche come spiegato di seguito.
Risoluzione manuale
Quando un cluster entra in uno stato parzialmente connesso, deve essere riavviato. La prima raccomandazione è tentare di identificare e risolvere il problema che ha causato questo stato. Se è dovuto a problemi di rete, tentare di stabilizzare la rete. Dopo aver risolto i problemi, chiudi i nodi creando un singolo cluster e avviali uno per uno.
Ad esempio, considera il cluster nella Figura 3. Si può vedere che il nodo 1, il nodo 2 e il nodo 4 sono completamente connessi nel sottocluster 1, mentre il nodo 3 e il nodo 5 sono completamente connessi nel sottocluster 2. Poiché un problema di rete ha portato alla creazione del sottocluster 2, devi spegnere il nodo 3 e il nodo 5. Prova a risolvere il problema che ha causato il problema di rete. Una volta fatto, avvia ogni nodo uno alla volta. I nodi avviati diventeranno parte del sottocluster 1, che si trasformerà quindi in un cluster completamente connesso.
Recupero automatico del cervello diviso
Per soddisfare Split Brain, NCache fornisce anche un metodo automatico, che è il Recupero automatico del cervello diviso opzione attraverso la NCache Management Center. Poiché i dati possono essere di vari tipi e contenere diversi livelli di sensibilità, questa opzione è disabilitata di default. Dipende interamente dall'amministratore del NCache Il Centro di gestione può decidere se abilitarlo o meno in base a ciò che ritiene necessario in base alla situazione. Per abilitare il ripristino automatico split-brain per i cluster, vedere l'abilitazione del ripristino automatico split-brain tramite NCache Centro di gestione.
Vedere anche
Abilita il recupero automatico in caso di cervello diviso
Configurazione delle impostazioni del cluster di cache