Erlang Distribution Tips

轉載請註明,來自:http://blog.csdn.net/skyman_2001

一、連通節點的方式

1. .hosts.erlang方式:

(1) 創建.hosts.erlang文件(在$HOME目錄、當前工作目錄或$OTP_ROOT目錄下都可以),在文件裏寫上集羣的所有host名;

(2)啓動所有節點;

(3)檢查.hosts.erlang文件有無成功加載:net_adm:host_file().

(4)連通所有節點:net_adm:world().

2. ping方式:
net_adm:ping(Node).

參考:http://www.erlang.org/doc/man/net_adm.html

       http://www.ejabberd.im/interconnect-erl-nodes

二、如何一個節點host同時對應內網和外網IP

這種需求比較常見:本地有幾個節點組成一個集羣,某個節點又想和外網的節點連通,希望該節點(假設稱爲節點A)和本地節點連通用127.0.0.1,和外網節點連通用外網ip,怎麼實現呢?
方法是:在該節點機器的hosts文件里加上:
127.0.0.1  localhost skyman.com

erl -name [email protected],這樣本地節點連它就是用的127.0.0.1。

在外網的節點機器的hosts文件里加上:

節點A的公網ip  skyman.com

這樣外網節點連節點A就用的節點A的公網IP

參考:http://erlang.org/pipermail/erlang-questions/2004-October/013263.html

三、ping方的host名可以是任意的,被ping方的則不行

四、跨機器連通防火牆問題

要想連通某個節點,該節點(即被連接的)要保證:

1. epmd的端口(默認是4369)在防火牆打開;

2. erl要加-kernel inet_dist_listen_min Min inet_dist_listen_max Max 設定使用的端口範圍(若只有一個端口,則Min==Max),要保證這些端口在防火牆打開,並且這些端口不能全部被佔用

也就是要連接某個節點,是和該節點所在機器的epmd以及該節點通訊。所以發起連接的節點不需要上面的2個要求,即所在機器不需要防火牆打開4369端口,也不需要加-kernel inet_dist_listen_min Min inet_dist_listen_max Max

五、即使節點的host是127.0.0.1,是能連公網host的節點的,只是公網host節點不能連它

若節點:[email protected],連上公網host節點,則在公網host節點裏輸入nodes(),則輸出:['[email protected]'],公網host節點用'[email protected]'是可以訪問到n1節點的。

這時要注意一個問題:如果在另外一臺機器上也有[email protected],它也連同一個公網host節點,則會連不上,因爲它的名字和前一個一模一樣,衝突了,所以不同的機器最好節點名也不同

六、2個沒連通的節點,只要一個節點的某進程向另一個節點的進程發消息,就會自動連通節點;erlang:monitor(process, Pid)也會自動連接Pid所在的節點

發佈了184 篇原創文章 · 獲贊 13 · 訪問量 71萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章