【发布时间】:2016-09-20 12:20:58
【问题描述】:
我正在编写一个分布式记忆应用程序并使用模式。 当一个新节点加入集群时,它会通过 rpc 调用(从启动模式的主节点)添加到 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)
【问题讨论】:
-
为什么要删除这个节点?当它恢复时,它将重新加入 mnesia 集群。
-
当一个节点发生故障时,另一个(备份)节点将启动并完成他的工作。因此,我需要旧节点(已关闭)离开集群,并且在它再次加入时应该设置干净。 (然后他将成为一个备份节点,直到另一个节点发生故障)
-
你有一个答案 - 所以我不会添加任何东西。问题是,我的印象是你在这种情况下可能滥用了记忆力。本地表还不够吗?你需要集群吗?
-
是的,我需要集群,因为我正在编写一个分布式应用程序,需要在不同节点之间交换信息。
-
你让它工作了吗?怎么样?
标签: erlang schema distributed mnesia