它是将所有数据复制到每个节点还是将数据片段存储在每个节点上,然后在运行时从不同节点获取每个需要的片段?或者这是如何工作的?
如果您使用 MySQL 而不是 Mnesia,集群是否仍能正常工作?
它是将所有数据复制到每个节点还是将数据片段存储在每个节点上,然后在运行时从不同节点获取每个需要的片段?或者这是如何工作的?
如果您使用 MySQL 而不是 Mnesia,集群是否仍能正常工作?
默认情况下,所有内容都转到 mnesia,并且大部分内容都被复制。您还可以选择是否将 mnesia 表放入磁盘或内存。基本上,您可以根据需要重新配置 mnesia 表位置,但通常表会在内存中复制,以保持它们关闭。
集群 ejabberd 也是通过跨越 mnesia 集群上的节点来完成的,因此可能不值得努力摆脱它。
大多数 mods(实现 xeps)使用 mnesia,但是它们具有 mysql 等价物。它甚至更广泛 - 它们具有以“_odbc”为后缀的 SQL 等价物。示例:mod_roster 和 mod_roster_odbc。
总而言之,您最终可以使用轻量级的 mnesia 来处理配置和一些内存中的东西,并使用中央 mysql 来处理繁重的东西。mysql 的位置可在 ejabberd 配置中配置。
Mnesia 可以很容易地支持集群,但它确实需要在交互式会话中进行一些修改。erl
至于具体的机制,都是由erlang和mnesia内置的集群处理的,这超出了我的专业范围。您可以告诉它在每个节点上存储副本(副本),但它是一个细粒度的控件,需要根据您的需要进行调整,正如本文档的第一条评论所暗示的那样。不幸的是,我找不到任何关于碎片如何工作的信息,尽管我怀疑 mnesia 会缓存(在内存或磁盘上,取决于配置)它从另一个节点检索到的任何结构。
您可能会看一下这个,因为它解释了 SQL 的注意事项 - 即使用它不会消除在 ejabberd 中使用 Mnesia。似乎共享 mysql 主机是一种选择,或者在 mysql 的集群功能中使用主从复制配置也可能会起作用,因为共享 SQL 服务器可以工作。