Erlang節點的串連

來源:互聯網
上載者:User

副標題:《Programming Erlang》第十章 分布式編程 讀書筆記


題外話:很久沒更新blog了,前陣子又是工作忙,又是要考試,實在沒精力寫blog。倒是攢了不少材料,以後慢慢添吧。


這章最重要的內容就是erlang中兩個節點之間的串連規則。
同一台機器上的兩個節點之間的串連很簡單,直接照著書上做就行了,比較麻煩的是不同機器之間節點的串連。

書中的部分代碼我測試的結果是錯的,猜測可能和erlang的版本有關,也有可能和環境有配置關。

首先,需要解釋一下long name和short name之間的區別。
舉例來說,
erl
-name li@Server1.com   
erl -name li@10.68.8.50
            這是long name,用'-name'標識。

erl -sname li@Server1
erl -sname li    
            這是short name,用'-sname'標識。

從格式上來說,short name後面跟的網域名稱不能是IP,也不能夠帶有‘.’,比如不能是'Server1.com'而只能是'Server1'。
從用法上來說
如果兩個節點運行在一個機器上,就用 sname,
        比如'erl -sname li','erl -sname liu'

如果兩個節點運行在不同的機器上,且兩個機器運行在不同的網段,那麼必須用long name,
        比如'erl -name li@Server1.com',erlang會通過DNS解析出名字中的網域名稱,找到對應的機器

如果兩個節點運行在不同的機器上,但兩個機器在同一個子網中,那麼可以和上面一樣用long name方式,
        比如 'erl -name li@Server1.com','erl -name li@10.68.8.50'
也可以用sname,但是必須保證sname的名字在/etc/hosts中能找到對應的IP,
        比如 'erl -name li@Server1',這時候/etc/hosts中需要添加 'Server1 10.68.8.51'

總而言之,如果需要用到DNS,那麼必須使用long name,如果不需要用到DNS,可以使用sname,但需要設定/etc/hosts。

瞭解了long name和short name的區別,下面的部分就容易了。
以書中的代碼為例,假設現在有兩台機器A和B,靜態IP分別為10.68.8.50和10.68.8.51,機器名分別為Server1.aaa.com和Server2.aaa.com,且在同一個子網中,那麼可以實驗如下操作:

方案1:

A,B: erl -sname gandalf@10.68.8.50/51
結果:錯誤,如果網域名稱是IP,必須是-name

方案2:
A:    設定/etc/hosts,添加 'Server2 10.68.8.51'
        erl -sname gandalf@Server1 -setcookie abc
        ......
        kvs:start().

B:   設定/etc/hosts,添加 'Server1 10.68.8.50'
        erl -sname bilbo@Server2 -setcookie abc
        > rpc:call(gandalf@Server1, kvs, store, [weather, fine]).

結果: 正確輸出。

方案3:
A:    erl -name gandalf@10.68.8.50 -setcookie abc
        ......
        kvs:start().

B:    erl -name bilbo@10.68.8.51 -setcookie abc
        > rpc:call(’gandalf@10.68.8.50‘, kvs, store, [weather, fine]).

結果: 正確輸出。
注意:在rpc:call中,gandalf@10.68.8.50必須加上單引號,否則識別不了正確的IP

方案4:
A:    erl -name gandalf@Server1.aaa.com -setcookie abc
        ......
        kvs:start().

B:    erl -name bilbo@Server2.aaa.com -setcookie abc
        > rpc:call(gandalf@Server1.aaa.com, kvs, store, [weather, fine]).

結果: 如果DNS能夠解析Server1.aaa.com,那麼結果正確。否則找不到對應的節點。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.