Cluster cerebrale diviso
Ciò si verifica quando uno o più nodi di un cluster sperimentano la disconnessione dagli altri nodi con conseguente formazione di sottocluster o cluster cerebrali suddivisi.
In sostanza, Split-Brain è una terminologia basata su un'analogia con la sindrome medica Split-Brain. Questa condizione descrive l'incoerenza dei dati o la loro disponibilità che può derivare dal mantenimento di due set di dati separati con portata sovrapposta. Ciò potrebbe essere dovuto ai server in un progetto di rete o a una condizione di guasto che potrebbe essere causata da una comunicazione errata e dalla desincronizzazione dei dati tra i server corrispondenti nella rete. Questa è anche comunemente definita partizione di rete.
Dal NCache è anche una cache distribuita che può comprendere più nodi e cluster, anche la presenza di un cluster Split-Brain è una possibilità con NCache.
Quando si verifica uno Split-Brain, c'è la possibilità che si formino sottocluster. Pertanto, uno dei sottocluster deve essere rimosso per garantire che tutti i client vengano reindirizzati a un cluster integro. Poiché la rimozione del sottocluster comporta la perdita dei dati, il sottocluster 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.38 e 20.200.20.40. In questo caso verrà rimosso il sottocluster con nodo coordinatore IP 20.200.20.40.
Uno Split-Brain può rappresentare un'incoerenza dei dati o problemi di disponibilità derivanti dalla manutenzione di due set di dati separati con una sovrapposizione nell'ambito. Inoltre, ciò può portare a problemi significativi e creare una situazione disastrosa per l'amministratore. Per questo motivo è molto importante assicurarsi che non vi siano rischi di Split-Brain e corruzione dei dati.
Esistono alcuni approcci comuni per affrontare il problema della partizione di rete dopo che si è verificato uno Split-Brain.
- Approccio ottimista
- Approccio pessimista
Nell'approccio ottimistico, il canale di comunicazione tra i nodi viene semplicemente ripristinato lasciando temporaneamente i nodi partizionati funzionare normalmente. Questo viene fatto presupponendo che i nodi si sincronizzeranno automaticamente in breve tempo. Questo approccio potrebbe essere solo una semplice via d’uscita poiché nel caso di Split-Brain esiste sempre il rischio di corruzione dei dati.
D’altro canto, l’approccio pessimistico richiede di rinunciare o semplicemente di sacrificare la disponibilità dei sistemi per mantenere i dati coerenti. Al rilevamento di un partizionamento di rete, l'accesso alle sottopartizioni è limitato. Questo viene fatto per garantire la coerenza dei dati. In questo caso, per aggirare la divergenza della cronologia, solo un componente può continuare a effettuare richieste di lettura/scrittura allo storage.
Gestire il cluster split-brain NCache
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 devono arrestarsi, riavviarsi, riconnettersi o essere rimossi dalla rete. NCache fornisce una funzionalità chiamata Ripristino automatico Split-Brain, che è disabilitata per impostazione predefinita. 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 la topologia Partition-of-Replica. Per comprendere questo in modo approfondito, diamo un'occhiata alla connettività del cluster, alla topologia della replica delle partizioni e agli 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 rimanenti nodi non coordinatori o partecipanti. Il nodo coordinatore è il nodo più anziano, ovvero il nodo che è iniziato 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, informa il nodo coordinatore, che gestisce il resto delle operazioni per mantenere un ambiente collegabile nel cluster. Altre attività svolte dal nodo coordinatore includono la distribuzione dei bucket, l'attivazione del caricatore di 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 una parte/membro del cluster corrispondente. Se un nodo lascia 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 statale, che mira 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 integro, nella topologia PoR tutti i client sono connessi a tutti i nodi del cluster. Nel caso di Split-Brain, rilevante per Partition-Replica (PoR), 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 lascia, il client può continuare a eseguire le operazioni.
Arrestato
Se un nodo lascia il cluster correttamente, ovvero è stato spento e non esiste alcun processo host per il nodo corrispondente, allora il nodo viene considerato arrestato (per quanto riguarda il 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 funzionalità è specifica della topologia REP.
Connettività client
I client che erano collegati in precedenza al nodo interrotto ora si connetteranno ad 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 del cluster ha un valore di timeout, che è di 60 secondi per impostazione predefinita ed è configurabile in NCache Centro Direzionale. Ogni cluster dispone di tentativi di connessione (valore predefinito 2) e intervallo di tentativi (valore predefinito 2). Entrambi questi valori sono configurabili anche nel file NCache Centro Direzionale.
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 nella parte del sottocluster che mantiene la connettività appropriata nella rete. Nel caso in cui sia connesso con entrambi i sottocluster, si unirà al sottocluster di dimensione maggiore, ovvero al sottocluster che ha il maggior numero di nodi. Se il numero di nodi è uguale, confronterà gli IP con il nodo Coordinatore e si unirà al Coordinatore 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.
Risolto il problema di connettività parziale
Per risolvere il problema di 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, si consideri il cluster nella Figura 3. Si può vedere che il nodo 1, il nodo 2 e il nodo 4 sono completamente connessi nel sotto-cluster 1, mentre il nodo 3 e il nodo 5 sono completamente connessi nel sotto-cluster 2. Poiché una rete il problema tecnico ha provocato la creazione del sottocluster 2, è necessario arrestare il nodo 3 e il nodo 5. Prova a risolvere il problema che causa il problema tecnico della rete. Una volta terminato, avvia ciascun nodo uno per uno. I nodi avviati diventeranno parte del sotto-cluster1, che si trasformerà quindi in un cluster completamente connesso.
Recupero automatico del cervello diviso
Per soddisfare Split-Brain, NCache fornisce anche un metodo automatico, ovvero l'opzione Split-Brain Auto Recovery tramite NCache Centro Direzionale. Poiché i dati possono essere di vario tipo e avere diversi livelli di sensibilità, per impostazione predefinita questa opzione è disabilitata. Dipende interamente dall'amministratore del NCache Centro Gestione se abilitarlo o meno secondo quanto ritenuto necessario in base alla situazione. Per abilitare il ripristino automatico Split-Brain per i cluster, vedere Abilitazione del ripristino automatico del cervello diviso utilizzando NCache Centro di gestione.
Vedere anche
Abilita il ripristino automatico del cervello diviso utilizzando NCache Centro di gestione
Configurazione delle impostazioni del cluster di cache