2009-06-11 4 views
6

내 응용 프로그램은 보통 두 개 이상의 노드가있는 erlang 클러스터에서 실행됩니다. 잘 동작하는 노드 들간에 (erlang : monitor_node를 사용하는) 능동적 인 모니터링이있다 - 나는 위로 향한 노드가 이제는 작동하지 않는다는 사실을 감지하고 그에 반응한다.다운 된 후 다시 시작하는 원격 erlang 노드를 모니터링하는 방법

그러나 노드가 다시 시작되어 다시 비즈니스로 돌아 오는 것을 어떻게 알 수 있습니까? 물론 주기적으로 노드가 백업 될 때까지 ping을 수행 할 수 있지만 단순히 놓친 방법이 더 있습니까? 프로세스 그룹이이를 달성하는 더 좋은 방법입니까? (추가 수정 됨)

내가 대답은 감독자의 선거와 같은 기술을 수행 할 생각은 내가 실종 된 사고 과정이다. 나는이 문제를 살펴보고이 질문을 완료로 표시 할 것입니다 ....

답변

2

그러나 노드가 다시 시작되었고 다시 비즈니스에 있다는 것을 어떻게 알 수 있습니까? 물론 주기적으로 노드가 백업 될 때까지 ping을 수행 할 수 있지만 단순히 놓친 방법이 더 있습니까? 프로세스 그룹이이를 달성하는 더 좋은 방법입니까? 하지만 어떻게 다시 시작 노드 자체명시 적으로 그것이 다시 시작 완료 수퍼바이저/모니터링 노드를 통보하고 다시 사용할 수 있는지를 가진 약

그냥 생각?

이 목적을 위해 되풀이되는 "하트 비트 메시지"를 사용하거나 초기화가 성공적으로 완료된 후에 보낼 수있는 사용자 지정 메시지를 사용할 수 있습니다. 당신은 global_group을 다음 global_group을 만들 사용할 수

start(SupervisorPID) -> 
    SuperVisorPID ! {hello, MyPID}; 
    mainloop(). 
+0

예 - 실제로 노드가 다시 시작될 때 수행하는 작업입니다. 실제로 모든 수퍼바이저 노드가 없으며 실제로 "버디"이고 노드는 시스템의 상태를 결정하기 위해 버디에 도달합니다 (그리고 아마도 그 상태를 복사 할 때) 시작될 것이다. –

+0

그리고 명확해야 - 각 노드가 동일하므로 첫 번째 노드 인 경우 무엇을 할 것인가? 어떤 노드로도 rpc 할 수없고 메시지를 보낼 PID가 (물론) 없습니다. 하지만 단순히 다른 노드가 시작되어 그 노드에 연결될 때까지 기다릴 수는 있습니다 ... –

+2

노드가 기본적으로 중앙 노드의 형태없이 분산되어있는 것 같습니다. 나는 정상적으로, 당신은 적어도 하나의 감독자 또는 적어도 일부는 '마스터'노드를 갖고 싶어한다고 가정합니다. 모든 노드가 자신의 보고서/메시지를 보낼 수 있다는 것, 즉 어떤 형태의 "노드 레지스트리". 어쩌면 당신은 더 많은 정보를 제공 할 필요가 있습니다. 이미 마스터가 없다면 각 노드가 마스터가되는 것을 컨벤션으로 생각할 수도 있다고 상상할 수 있습니다. 그것은 평등 요구 사항을 만족시킬 것입니다. – none

1

:의 라인을 따라 뭔가 monitor_nodes (참)는 같은 글로벌 그룹 내의 다른 노드를 모니터링 할 수 있습니다. 노드를 모니터링하는 프로세스는 nodeup 및 nodedown 메시지를받습니다.

관련 문제