本文共 7466 字,大约阅读时间需要 24 分钟。
之前记录过 , 魔鬼在于细节(Devils are in the details),这个模块还是有一些细节要注意,特别是官方文档上语焉不详的问题.先从net_kernel的几个小功能开始:
Eshell V5.9 (abort with ^G)1> net_kernel:start([test@nimbus]).{ok,<0.34.0>}(test@nimbus)2>
(d@zen.com)3> net_kernel:longnames().true
Eshell V5.9 (abort with ^G)1> net_kernel:connect_node(a.zen.com).ignored2>
[root@nimbus ligaoren]# erl -setcookie abc -name a@zen.comErlang R15B (erts-5.9) [source] [64-bit] [async-threads:0] [hipe] [kernel-poll:false]Eshell V5.9 (abort with ^G)(a@zen.com)1> net_adm:ping(c@zen.com).pong(a@zen.com)2> net_adm:ping(b@zen.com).pong(a@zen.com)3> nodes().['c@zen.com','b@zen.com'](a@zen.com)4> net_kernel:disconnect(b@zen.com).true(a@zen.com)5> nodes().['c@zen.com'](a@zen.com)6> [root@nimbus ligaoren]# erl -setcookie abc -name b@zen.comErlang R15B (erts-5.9) [source] [64-bit] [async-threads:0] [hipe] [kernel-poll:false]Eshell V5.9 (abort with ^G)(b@zen.com)1> nodes().['c@zen.com'](b@zen.com)2> [root@nimbus ligaoren]# erl -setcookie abc -name c@zen.comErlang R15B (erts-5.9) [source] [64-bit] [async-threads:0] [hipe] [kernel-poll:false]Eshell V5.9 (abort with ^G)(c@zen.com)1> nodes().['a@zen.com','b@zen.com'](c@zen.com)2> nodes().['a@zen.com','b@zen.com'](c@zen.com)3>
Eshell V5.9 (abort with ^G)(b@zen.com)1> rpc:call(a@zen.com,erlang,now,[]).{ 1356,605316,345986}(b@zen.com)2> nodes().['a@zen.com'](b@zen.com)3>
[root@nimbus ligaoren]# erl -setcookie abc -name b@zen.com -kernel dist_auto_connect neverErlang R15B (erts-5.9) [source] [64-bit] [async-threads:0] [hipe] [kernel-poll:false]Eshell V5.9 (abort with ^G)(b@zen.com)1> rpc:call(a@zen.com,erlang,now,[]).{badrpc,nodedown}(b@zen.com)2> net_kernel:connect_node(a@zen.com).true(b@zen.com)3> rpc:call(a@zen.com,erlang,now,[]).{ 1356,605925,729498}(b@zen.com)4> node().'b@zen.com'(b@zen.com)5>
%% Node a@zen.comEshell V5.9 (abort with ^G)(a@zen.com)1> net_adm:ping(c@zen.com).pong(a@zen.com)2> nodes().['c@zen.com'](a@zen.com)3> %% Node c@zen.comEshell V5.9 (abort with ^G)(c@zen.com)1> nodes().['a@zen.com'](c@zen.com)2>=ERROR REPORT==== 27-Dec-2012::19:08:26 ===global: 'c@zen.com' failed to connect to 'b@zen.com'(c@zen.com)2> nodes().['a@zen.com','b@zen.com'](c@zen.com)3> %% Node b@zen.comerl -setcookie abc -name b@zen.com -kernel dist_auto_connect neverEshell V5.9 (abort with ^G)(b@zen.com)1> net_adm:ping(a@zen.com).pang(b@zen.com)2> net_kernel:connect_node(a@zen.com).true(b@zen.com)3>=ERROR REPORT==== 27-Dec-2012::23:06:03 ===global: 'b@zen.com' failed to connect to 'c@zen.com'(b@zen.com)3> net_adm:ping(c@zen.com).pong(b@zen.com)4> nodes().['a@zen.com','c@zen.com'](b@zen.com)5>
[root@nimbus ligaoren]# erl -setcookie abc -name a@zen.comEshell V5.9 (abort with ^G)(a@zen.com)1> net_kernel:monitor_nodes(true).ok(a@zen.com)2> net_kernel:connect_node(c@zen.com).true(a@zen.com)3> flush().Shell got {nodeup,'c@zen.com'}ok(a@zen.com)4> net_kernel:connect_node(b@zen.com).true(a@zen.com)5> flush().Shell got {nodeup,'b@zen.com'}ok(a@zen.com)6> flush().Shell got {nodedown,'c@zen.com'}ok(a@zen.com)7> nodes().['b@zen.com'](a@zen.com)8> flush().ok(a@zen.com)9> net_kernel:connect_node(c@zen.com).true(a@zen.com)10> flush().Shell got {nodeup,'c@zen.com'}ok(a@zen.com)11> flush().Shell got {nodedown,'c@zen.com'}ok(a@zen.com)12> %%c@zen.com 配合重启 erl -setcookie abc -name c@zen.comEshell V5.9 (abort with ^G)(c@zen.com)1> q().ok(c@zen.com)2>erl -setcookie abc -name c@zen.comEshell V5.9 (abort with ^G)(c@zen.com)1> q().ok(c@zen.com)2> %% b@zen.com 节点只是打酱油的 erl -setcookie abc -name b@zen.comEshell V5.9 (abort with ^G)(b@zen.com)1> nodes().['a@zen.com','c@zen.com'](b@zen.com)2> flush().ok(b@zen.com)3>
[root@nimbus ligaoren]# erl -setcookie abc -name a@zen.comErlang R15B (erts-5.9) [source] [64-bit] [async-threads:0] [hipe] [kernel-poll:false]Eshell V5.9 (abort with ^G)(a@zen.com)1> erlang:monitor_node('c@zen.com',true).true(a@zen.com)2> erlang:monitor_node('b@zen.com',true).true(a@zen.com)3> ets:tab2list(sys_dist).[{connection,'b@zen.com',up,<0.46.0>,undefined, {net_address,{ { 127,0,0,1},51575},"zen.com",tcp,inet}, [],normal},{connection,'c@zen.com',up,<0.40.0>,undefined, {net_address,{ { 127,0,0,1},39308},"zen.com",tcp,inet}, [],normal}](a@zen.com)4> flush().Shell got {nodedown,'c@zen.com'}ok(a@zen.com)5> nodes().['b@zen.com'](a@zen.com)6> net_adm:ping(c@zen.com).pong(a@zen.com)7> nodes().['b@zen.com','c@zen.com'](a@zen.com)8> ets:tab2list(sys_dist).[{connection,'c@zen.com',up,<0.53.0>,undefined, {net_address,{ { 127,0,0,1},60762},"zen.com",tcp,inet}, [],normal},{connection,'b@zen.com',up,<0.46.0>,undefined, {net_address,{ { 127,0,0,1},51575},"zen.com",tcp,inet}, [],normal}](a@zen.com)9> flush().ok(a@zen.com)10> net_adm:ping(c@zen.com).pong(a@zen.com)11> ets:tab2list(sys_dist).[{connection,'c@zen.com',up,<0.60.0>,undefined, {net_address,{ { 127,0,0,1},39809},"zen.com",tcp,inet}, [],normal},{connection,'b@zen.com',up,<0.46.0>,undefined, {net_address,{ { 127,0,0,1},51575},"zen.com",tcp,inet}, [],normal}](a@zen.com)12> erlang:monitor_node('c@zen.com',true).true(a@zen.com)13> ets:tab2list(sys_dist).[{connection,'c@zen.com',up,<0.60.0>,undefined, {net_address,{ { 127,0,0,1},39809},"zen.com",tcp,inet}, [],normal},{connection,'b@zen.com',up,<0.46.0>,undefined, {net_address,{ { 127,0,0,1},51575},"zen.com",tcp,inet}, [],normal}](a@zen.com)14> flush().Shell got {nodedown,'c@zen.com'}ok(a@zen.com)15>
好了,今天就到这里.
转载地址:http://uawnm.baihongyu.com/