2016-05-23 16 views
4

Ich schreibe eine verteilte Mnesia-Anwendung und verwenden ein Schema. Wenn ein neuer Knoten dem Cluster verbindet, wird er durch einen RPC-Aufruf an das Mnesia Schema hinzugefügt (vom masternode die das Schema gestartet), die führt die folgenden Funktionen:Erlang: Wie Knoten aus Mnesia-Cluster entfernen

start_Mnesia(MasterNode) -> 
    mnesia:start(), 
    mnesia:change_config(extra_db_nodes, [MasterNode]), 
    Tabs=mnesia:system_info(tables) -- [schema], 
    [mnesia:add_table_copy(Tab, node(), ram_copies) || Tab <- Tabs]. 

Wenn ein Knoten abstürzt oder trennt, die Der Master-Knoten empfängt ein nodedown-Ereignis und der Knoten sollte aus dem Cluster entfernt werden. Wie kann ich das erreichen?

EDIT: Ich endete mit der folgenden Lösung: TabList ist eine Liste aller Tabellen in meinem Schema, die mein Knoten verwendet.

Mnesia: del_table_copy (TabList, Knoten)

+0

Warum möchten Sie diesen Knoten entfernen? Wenn es wieder hochkommt, wird es wieder Mitglied im MN-Cluster sein. – user425720

+0

Wenn ein Knoten ausfällt, wird ein anderer (Sicherungs-) Knoten gestartet und erledigt seine Arbeit. Daher brauche ich den alten Knoten (der nach unten gegangen ist), um den Cluster zu verlassen, und er sollte sauber eingerichtet werden, wenn er erneut verbunden wird. (Dann wird er ein Backup-Knoten sein, bis ein anderer Knoten ausfällt) – muehsi

+0

Sie haben eine Antwort - also werde ich nichts hinzufügen. Die Sache ist, ich habe den Eindruck, dass Sie in diesem Fall möglicherweise Mnesie missbrauchen. lokale Tabellen werden nicht ausreichen? Brauchst du den Cluster? – user425720

Antwort

1

This should do what you want. Gemäß den Dokumentationen:

del_table_copy (Registerkarte, Knoten) -> {abgebrochen, R} | {atomic, ok}

Löscht das Replikat der Tabelle Tab am Knoten Node. Wenn das letzte Replikat mit dieser Funktion gelöscht wird, verschwindet die Tabelle vollständig.

Diese Funktion kann auch zum Löschen eines Replikats der Tabelle schema verwendet werden. Der Mnesia-Knoten wird dann entfernt. Beachten Sie, dass Mnesia zuerst auf dem Knoten angehalten werden muss.

+0

Ich werde das versuchen, danke im Voraus. – muehsi