2017-02-09 7 views

Antwort

2

erlang: senden nicht Verwenden Sie einen einzigen Port wie der für epmd. Erlang verwendet den EPMD-Port, um andere Knoten zu finden. Daher müssen alle Server an diesem Port miteinander kommunizieren können. In einem Erlang-Cluster sind alle Knoten mit allen anderen Knoten in einem Netz verbunden. Der Erlang epmd verwendet zwei Ports, einen zum Ermitteln anderer Erlang-Knoten (Standardport 4369) und einen dynamischen Bereich für die tatsächliche Kommunikation.

Alle Knoten in einem Cluster müssen die gleiche EPMD-Portnummer für hören verwenden.

Beachten Sie auch, dass Epmd verfolgt, welcher Erlang-Knoten welche Ports auf dem lokalen Computer verwendet. Wenn Sie den Bereich der Ports beschränken möchten, die Erlang für die Inter-Erlang-Node-Kommunikation verwendet, können Sie z. B. 9100-9105 die folgenden Zeilen hinzufügen: inet_dist_listen_min 'und' inet_dist_listen_max '.

Beispiel:

{ kernel, [ 
       {inet_dist_listen_min, 9100}, 
       {inet_dist_listen_max, 9105} 
      ]}, 

oder beim Start des Erlang-Knoten unter Verwendung von Kernel-Variablen 'inet_dist_listen_min' und 'inet_dist_listen_max'.

Beispiel:

erl -sname foo -kernel inet_dist_listen_min 9100 inet_dist_listen_max 9105 

sicherzustellen, dass der Bereich festgelegt Sie genügend Ports für alle Knoten im Cluster zur Verfügung stellt.

+0

Würde das 'set_env' Beispiel funktionieren? Ich vermute, dass der Port ausgewählt wurde, bevor Sie die Möglichkeit haben, Umgebungsvariablen zu ändern. – legoscia

+1

@legoscia hat die Antwort geändert, weil set_env die Kernelvariablen festlegt, aber der Knoten setzt die ursprünglichen Portnummern fort. Sehr eigenartig. – byaruhaf