Erlang에서 노드를 동적으로 그리고 Global_groups 추가합니다

StackOverflow https://stackoverflow.com/questions/215615

  •  03-07-2019
  •  | 
  •  

문제

Erlang 지원을 사용하여 노드를 그룹으로 분할합니다. Global_group 기준 치수. 또한 Erlang은 노드 네트워크에 노드를 즉시 추가하는 것을 지원합니다. 이 두 기능은 서로 사용할 수 있습니까?
내가 이해하는 한, 당신은 글로벌 그룹을 사용하기 위해 스타트 업의 모든 노드를 지정해야합니다.

도움이 되었습니까?

해결책

보고 Global_group 소스, 노드 목록은 노드가 동기화 될 때 점검 된 구성의 일부입니다.

그러나 내보낸 기능이 있습니다 Global_Group : Global_Groups_Changed 노드 목록 변경을 처리합니다.

그것은 호출됩니다 커널 : config_change (보다 모듈 : config_change/3) 따라서 릴리스 업그레이드 (OTP Embedded-Systems 스타일) 중에 Global_Group에 새 노드를 추가 할 수 있습니다 (참조) "응용 프로그램 사양 업데이트")

그것 ~할 것 같다 단순히 할 수 있습니다 :

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [ { global_groups, [GroupTuple|GroupTuples] } ], [], [] )

이미 Global_Groups 구성이 있다고 가정하면 OR

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [], [{ global_groups, [GroupTuple|GroupTuples] }], [] )

Global_Groups를 아직 존재하지 않는 클러스터로 구성하는 경우.

각 노드에서 위의 작업을 수행해야하며 프로세스 중에 동기화하기로 결정하면 구성 차이의 선을 분할합니다. (댓글을 참조하십시오 Global_group 소스 릴리스 업그레이드 중 동기화 소개)

하지만 일단 그 모든 사람들에게 이루어지면

global_group:sync()

모든 것이 다시 작동하도록해야합니다.

위의 레시피를 테스트하지는 않았지만 맛있게 보입니다. ^_^

다른 팁

노드는 명령 줄 플래그 -name (long name) 또는 -smame (짧은 이름)을 사용하여 이름을 부여한 Erlang 런타임 시스템 실행입니다.

숨겨진 노드는 명령 줄 플래그 -Hidden으로 시작된 노드입니다. 숨겨진 노드와 다른 노드 간의 연결은 전이적이지 않으므로 명시 적으로 설정해야합니다. 또한 숨겨진 노드는 노드 ()에 의해 리턴 된 노드 목록에 나타나지 않습니다. 대신 노드 (숨겨진) 또는 노드 (연결)를 사용해야합니다. 예를 들어, 숨겨진 노드는 Global이 추적하는 노드 세트에 추가되지 않음을 의미합니다.

요컨대, 그렇습니다. 다른 노드가 찾을 수 있도록 노드 이름을 제시해야합니다.

시도하지 않고 묻거나 매우 복잡한 질문이 있고 아마도 당신이 성취하려는 일의 예가 더 나은 답을 줄 수 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top