Sono in esecuzione due nodi di erlang con un database mnesia replicato. Ogni volta che provavo ad avviarne uno mentre MNESIA NON CORRE sull'altro, mnesia: wait_for_tables (? TABS,? TIMEOUT), si bloccava sul nodo da cui era chiamato. Ho bisogno di una struttura in cui (se entrambi i nodi non sono in esecuzione), posso iniziare a lavorare con uno mentre l'altro è giù e in seguito decidere di portare l'altro in su e continuare a funzionare bene. Devo essere sicuro che il primo nodo in esecuzione sia stato aggiornato più tardi quando si alza. Questo richiede necessariamente che ne abbia uno come maestro?Qual è il significato di un nodo master Mnesia in un cluster
%%% Modificato .......................................... .................................
Oh, ce l'ho. Il database che stavo usando aveva un paio di tabelle frammentate. Alcuni dei frammenti erano stati distribuiti attraverso la rete per il bilanciamento del carico. Quindi, Mnesia su un host proverebbe a caricarli attraverso la rete e fallirebbero dal momento che mnesia sull'altro è giù!
Immagino che questo non abbia niente a che fare con un nodo mnesia. Ma mi piacerebbe ancora capire il significato dello stesso perché non l'ho mai usato prima, tuttavia, gioco sempre con schemi distribuiti.
Grazie ancora ...
Grazie utente6834 –
uwiger, grazie. Pensa (in futuro), mnesia avrà un modo di unire due repliche basandosi su un meccanismo di aggiornamento recente o un qualche tipo di segnature temporali, specialmente quando viene rilevato l'errore fatale "rete partizionata in esecuzione"? –
Questo è possibile fare oggi, anche se non molto ben documentato o testato in tutte le parti. http://github.com/esl/unsplit è una libreria per l'unione automatica di tabelle mnesia dopo netsplits. Le versioni recenti di mnesia sono state accuratamente migliorate per supportare questo, e R14B03 aggiunge anche una forma di controllo del quorum ('maggioranza') per ridurre il rischio di incongruenze difficili da risolvere. – uwiger