Hinzufügen von Knoten dynamisch und global_groups in Erlang
Frage
Erlang Unterstützung seiner Knoten in Gruppen mithilfe der global_group Modul zu partitionieren.
Ferner unterstützt die Erlang-Knoten im laufenden Betrieb mit dem Knoten-Netzwerk hinzugefügt wird. Sind diese beiden Funktionen nutzbar miteinander?
Soweit ich verstehe, haben Sie jeden Knoten beim Start nennen die globalen Gruppen zu verwenden.
Lösung
Mit Blick auf die global_group Quelle Teil der Konfiguration überprüft durch die Knoten, die Liste der Knoten ist, wie sie synchronisiert werden.
Es gibt jedoch eine exportierte Funktion global_group : global_groups_changed , die den Knoten-Liste Wechsel behandelt
.Das nennt man von kernel: config_change (Siehe Modul: config_change / 3 ), so ist es sicherlich möglich, neuen Knoten zu einem global_group bei einem Release-Upgrade (OTP Embedded-Systeme Stil) (Siehe "Aktualisieren von Anwendungsspezifikationen" )
Es könnte möglich sein, einfach tun:
application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [ { global_groups, [GroupTuple|GroupTuples] } ], [], [] )
Angenommen, Sie bereits eine global_groups Konfiguration hat, oder
application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [], [{ global_groups, [GroupTuple|GroupTuples] }], [] )
Wenn Sie global_groups in einem Cluster konfigurieren, wo sie nicht bereits vorhanden sind.
Sie müssen die oben auf jedem Knoten zu tun, und wenn sie sich entscheiden, während des Prozesses zu synchronisieren, werden sie die Linien der Config Differenz gespalten. (Siehe den Kommentar im global_group Quelle über die Synchronisierung bei einem Release-Upgrade)
Aber einmal, dass alle von ihnen gemacht worden ist,
global_group:sync()
sollte wieder alles funktioniert bekommen.
Ich habe nicht das oben Rezept getestet, aber es sieht mir schmackhaft. ^ _ ^
Andere Tipps
Ein Knoten ist eine Ausführung von Erlang-Laufzeit System, das einen Namen gegeben wurde, über die Befehlszeile Flag -Name (Lange Namen) oder -sname (Kurznamen).
Ein versteckter Knoten ist ein Knoten gestartet mit Die Befehlszeile Flag -hidden. Die Verbindungen zwischen den versteckten Knoten und andere Knoten transitiv sind nicht, sie muss explizit festgelegt werden. Ebenfalls, versteckte Knoten nicht erscheint in der Liste der Knoten von Knoten () zurückgegeben wird. Stattdessen Knoten (versteckt) oder Knoten (verbunden) verwendet werden. Diese bedeutet zum Beispiel, dass die versteckt Knoten nicht zu dem Satz von zugefügt werden Knoten, die global ist Spur zu halten.
Also kurz gesagt, ja, müssen Sie unserem Knoten einen Namen geben können andere Knoten sein, um es zu finden.
Es fühlt sich an, dass Sie entweder fragen, ohne versuchen oder haben eine sehr komplexe Frage und vielleicht ein Beispiel dafür, was Sie versuchen, es möglich zu geben, eine bessere Antwort zu erreichen machen könnte.