Erlang:如何从Mnesia集群中删除节点

时间:2016-05-23 14:44:22

标签: erlang schema distributed mnesia

我正在编写分布式mnesia应用程序并使用模式。 当一个新节点加入集群时,它会通过一个rpc调用(来自启动模式的masternode)添加到mnesia模式中,该调用运行以下函数:

start_Mnesia(MasterNode) ->
    mnesia:start(),
    mnesia:change_config(extra_db_nodes, [MasterNode]),
    Tabs=mnesia:system_info(tables) -- [schema],
    [mnesia:add_table_copy(Tab, node(), ram_copies) || Tab <- Tabs].

当节点崩溃或断开连接时,主节点会收到nodedown事件,并且应从群集中删除该节点。我怎样才能做到这一点?

编辑: 我最终得到了以下解决方案: TabList是我的节点正在使用的模式中的所有表的列表。

  

mnesia:del_table_copy(TabList,Node)

1 个答案:

答案 0 :(得分:1)

This should do what you want。根据文件:

  

del_table_copy(Tab,Node) - &gt; {aborted,R} | {atomic,ok}

     

删除节点Node处的表Tab的副本。当最后一个副本   使用此功能删除,表格完全消失。

     

此函数还可用于删除名为的表的副本   架构。然后删除Mnesia节点。请注意,Mnesia必须是   先停在节点上。