2010-05-21 5 views

답변

3

erlang:disconnect_node/1보십시오 :

([email protected])1> nodes(). 
[] 
([email protected])2> net_adm:ping('[email protected]').   
pong 
([email protected])3> nodes().    
[[email protected]] 
([email protected])4> erlang:disconnect_node('[email protected]'). 
true 
([email protected])5> nodes().       
[] 

을 또는 당신이 원하는 경우에 노드에서 자신을 제거하기 위해 다른 노드 'nodes() :

([email protected])1> nodes(). 
[[email protected]] 
([email protected])2> rpc:eval_everywhere(erlang, disconnect_node, [node()]). 
abcast 
([email protected])3> nodes(). 
[] 

노드는 키 -hidden 시작 된 경우 :

([email protected])1> nodes(hidden). 
[[email protected]] 
([email protected])2> rpc:eval_everywhere(nodes(hidden), erlang, disconnect_node, [node()]). 
abcast 
([email protected])3> nodes(hidden). 
[] 
+0

불행히도, 이것은 내가 바라는 범위까지는 가지 않습니다. 숨겨진 것으로 노드를 시작한 다음 ping하면 노드()에 표시되지 않습니다. 위의 방법을 사용하여 연결 해제 한 후 다시 ping하면 노드가 노드()에 다시 표시됩니다. – mwt

+0

@mwt : ['nodes/1'] (http://www.erlang.org/doc/man/erlang.html#nodes-1)에는'visible','hidden', 'connected','this','known'. 그리고''ping/1' (http://www.erlang.org/doc/man/net_adm.html#ping-1)의 목적은 ".. 노드에 대한 연결 설정"을 시도하는 것입니다. 실패 할 경우'pang'을 반환하고 성공하면'pong'을 반환합니다. " 나는이 프리미티브를 사용하여 원하는 동작을 구현할 수 있다고 생각한다. –

+0

아마도, 그러나 나는 아직 얼마나 자주 볼 수 없습니다. 지금은 클러스터가 있습니다. 새 노드가 조인 할 때마다 클러스터에있는 모든 노드에 ping을 수행하여 연결을 시도합니다. 만약 그 노드들 중 하나가 -hidden이라면, ping은 새로운 노드를 숨겨진 노드에 연결하지 않을 것입니다. 이것은 내가 원하는 것입니다. 그러나 숨겨진 노드를 연결 해제하는 것만으로는 직접 핑 (ping)을 통해 연결될 수 있습니다. 그러면 노드()에 다시 나타납니다. 이제 노드의 상태를 변경하여 모든 인수가있는 nodes()를 호출하여 직접 ping을 수행 한 후에도 해당 노드의 상태를 변경하면 그 방법을 알고 싶습니다. – mwt

관련 문제