我正在运行两个具有复制mnesia数据库的erlang节点。每当我尝试启动其中一个,而mnesia不在另一个上运行时,mnesia:wait_for_tables(?TABS,?TIMEOUT)将挂起其调用的节点上。我需要一个结构(如果两个节点都没有运行),我可以开始使用一个,而另一个停止运行,然后决定让另一个节点继续运行。我需要确保运行的第一个节点在启动后更新。这是否一定要我有一个作为主人?集群中Mnesia主节点的重要性
%%%编辑.......................................... .................................
哦,我明白了。我使用的数据库有一些碎片表。一些片段已经在网络中分布以进行负载平衡。所以,一个主机上的Mnesia会尝试通过网络加载它们,并且会失败,因为另一个主机上的mnesia已经关闭了!
我想这与mnesia主节点没有任何关系。但我仍然很想理解相同的意义,因为我之前没有使用它,但是我总是玩分布式模式。再次
谢谢...
谢谢user6834 – 2010-10-11 10:39:51
uwiger,谢谢。你认为(在未来),mnesia会根据最近的更新机制或某种类型的签名来合并两个副本,特别是当检测到“正在运行的分区网络”致命错误时? – 2011-05-31 16:06:25
今天可以做到这一点,虽然没有非常好的记录或在所有部分进行测试。 http://github.com/esl/unsplit是一个在netsplits之后自动合并mnesia表的库。最近的mnesia版本已被仔细地增强以支持这一点,并且R14B03还增加了一种法定检查形式('多数')来减少难以解决的不一致性的风险。 – uwiger 2011-06-11 14:26:33