2017-05-03 16 views
0
start(_Type, _Args) -> 
    case application:get_env(ebid, join_schema) of 
    undefined -> 
     mnesia:create_schema([node()]), 
     mnesia:start(), 
     initialize_tables(), 
     mnesia:wait_for_tables([<<set of tables>>], timer:minutes(5)); 
    {ok, Node} -> 
     pong = net_adm:ping(Node), 
     join_schema(Node), 
     mnesia:wait_for_tables([<<set of tables>>], timer:minutes(5)) 
end, 

join_schema(Node) -> 
case rpc:call('[email protected]', mnesia, change_config, [extra_db_nodes, [node()]]) of 
    {ok, _Result} -> 
     lists:foreach(fun(Tab) -> io:format("~p : ~p ~n",[Tab,timer:tc(mnesia,add_table_copy,[Tab, node(), ram_copies])]) end, mnesia:system_info(tables)); 
    {error, Reason} -> 
     mnesia:stop(), 
     mnesia:del_table_copy(schema, node()), 
     error_logger:error_msg("Failed to join schema: ~p~n", [Reason]), 
     error(Reason) 
end. 

join_schema가 매우 오랜 시간이 걸리는 이유를 디버깅하는 방법이 있습니까? "테이블 세트"대신에 총 10 개의 테이블이 있고 또한 전체 크기는 <입니다. 400MBMnesia RPC 호출 시간이 너무 오래 걸림

작업자가 join_schema를 완료 한 후에 만 ​​작업자가 클러스터에 참가합니다.

마스터 노드가 정상적으로 작동하고 현재 상태가 양호합니다.

+0

마스터 테이블에 동시에 연결되는 4 개의 노드를 한꺼번에 시작하려고합니다. –

답변

1

마지막으로 문제를 해결할 수있었습니다. 문제는 부하에 따라 근로자의 EC2에 대한 자동 확장 정책을 따르는 것이 었습니다. 일정 기간 (1 년 이상) 동안 많은 직원들이 들어오고 나가기 때문에 마스터 테이블 extra_db_nodes가 크게 확장되었습니다.

마스터를 다시 시작하면 문제가 해결되었습니다.