gpt4 book ai didi

erlang - 群集中的Mnesia主节点有什么意义

转载 作者:行者123 更新时间:2023-12-04 08:38:32 25 4
gpt4 key购买 nike

我正在使用复制的mnesia数据库运行两个erlang节点。每当我尝试在其中一个mnesia未运行时启动其中一个时,mnesia:wait_for_tables(?TABS,?TIMEOUT)会卡在其调用该节点的节点上。我需要一种结构(如果两个节点都未运行),我可以在另一个处于关闭状态时开始使用一个结构,然后决定将另一个保持打开状态,然后继续正常工作。我需要确保正在运行的第一个节点在启动后已更新。这是否一定需要我作为主人?

%%%已编辑.............................................. .............................

哦,我知道了。我使用的数据库有几个零散的表。一些片段已分散在整个网络中,以实现负载平衡。因此,一台主机上的Mnesia会尝试通过网络加载它们,并且由于另一台主机上的Mnesia崩溃而失败!

我猜想这与Mnesia主节点无关。但是我仍然很想了解相同的含义,因为我以前从未使用过它,但是,我始终使用分布式模式。

再次感谢...

最佳答案

Mnesia主节点用于以相当残酷的方式解决裂脑情况。如果失忆症发现脑裂情况,它将发出事件“正在运行分区网络”。响应此问题的一种方法是将主节点设置为要保留的“岛”,然后重新启动其他节点。当它们恢复时,它们将无条件地从主节点加载表。

健忘症中还有另一种机制,称为force_load。一个人应该非常小心,但是如果您有两个节点A和B,则终止B(A将B记录为down),然后终止A,然后重新启动B,B将不会提供有关A何时停机的信息,因此将拒绝加载在A上具有副本的表。如果您知道A不会很快回来,则可以选择在B上调用mnesia:force_load_tables(Ts),这将使它以自己的副本运行。一旦A重新启动,它将检测到B启动,并从中加载表。如您所见,在其他几种情况下,您最终可能会遇到数据库不一致的情况。 Mnesia不会解决此问题,但会尝试提供工具来解决这种情况(如果发生)。不幸的是,在上述情况下,mnesia不会给您任何提示,但是可以创建一个检测问题的应用程序。

关于erlang - 群集中的Mnesia主节点有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3573404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com