Cluster Master-Slave - Come assicurarsi che il master sia davvero morto perché lo schiavo prenda il sopravvento?

5

Ho un sistema di messaggistica interno, simile a un broker di messaggi. Abbiamo un broker di messaggi master e un broker di messaggi slave. Un broker di messaggi riceve solo messaggi e li invia a tutti i nodi. Lo slave agisce come un nodo, riceve messaggi dal master e dallo stato di costruzione in modo che possa subentrare in caso di errore principale.

Ora il mio problema è: come posso rilevare, se possibile e senza intervento umano, che il master è morto !? Il maestro può sembrare morto e lo schiavo potrebbe essere tentato di prendere il sopravvento, ma poi potresti finire nella situazione di due padroni nel tuo sistema.

Sto cercando di capire in che modo i sistemi di cluster implementano il rilevamento dei guasti master. Fino ad ora sembra che un essere umano debba uccidere manualmente il master e attivare uno slave, ma sarebbe molto più preferibile che questo processo fosse automatico.

    
posta Pika Sucar 28.05.2016 - 18:46
fonte

2 risposte

3

Suggerirei di definire i criteri di cosa significa "morto", quindi periodicamente sondare per la condizione "morta" e eseguire lo swing over. Forse "morto" viene definito come "non ha inviato alcun messaggio a nessuno dei nodi in X secondi". Qualunque sia l'albero decisionale attualmente seguito da un essere umano per accertare se il servizio viene attivato o no. Potrebbe essere 1 condizione, 10 o dozzine. Quanto bene è definita la logica controllerà quanto accuratamente rileva "morto" e fallisce.

Inoltre, il processo di swing over dovrebbe includere l'informazione del master "morto" che è stato dichiarato come morto e non dovrebbe eseguire alcun tipo di operazioni "master". Con un'eccezione: potresti voler riprovare qualsiasi messaggio che era stato passato mentre era master ma non è andato.

Oppure, se il codice cliente è sotto il tuo controllo, chiedi ai clienti di riprovare i messaggi non riusciti. Hai bisogno di qualcosa per evitare che i messaggi cadano attraverso le fessure.

Sarebbe una buona idea avere anche il master morto, se ritorna online, per entrare in linea come secondario ..... e avere il rilevatore "deadness" che ora sta interrogando il nuovo master e pronto a fallire di nuovo il master originale se quel master muore e il master originale è attivo.

    
risposta data 18.07.2016 - 17:26
fonte
0

Guarda Teorema CAP . Se si desidera la tolleranza della partizione (ad esempio, il master sembra morto ma non proprio), è necessario sacrificare la coerenza (ossia il consenso del master) o la disponibilità (ovvero la gestione automatica del server abbattuto senza tempi di inattività). Non puoi averli tutti e tre.

Anche come CodeInChaos ha detto nel commento, con un solo master e uno slave, non è possibile distinguere un master morto da una rete partizionata. Per essere in grado di rilevare e recuperare dal partizionamento della rete senza un problema di consistenza, è necessario disporre di almeno tre repliche.

Se sei disposto a sacrificare la coerenza, quindi con due repliche, puoi fare in modo che lo slave prenda il sopravvento e dichiari che si tratta di un nuovo master dopo aver incrementato il passaggio al numero di versione. Tutto quello che fa il vecchio master sarà fatto con il vecchio numero di versione del passaggio e quando il master e lo slave si ricollegano, qualsiasi cosa che lo slave non ha riconosciuto prima della partizione di rete dovrà essere scartata.

    
risposta data 29.05.2016 - 03:14
fonte

Leggi altre domande sui tag