Ejabberd如何管理数据库以进行群集?

And*_*lla 6 mysql erlang mnesia cluster-computing ejabberd

它是将所有数据复制到每个节点还是将数据片段存储在每个节点上,然后在运行时从不同节点获取所需的每个片段?或者这是如何工作的?

如果您使用MySQL而不是Mnesia,群集是否仍能正常工作?

use*_*720 6

默认情况下,所有内容都会转到mnesia,并且大多数内容都会被复制.您也可以选择mnesia表是否转到光盘或内存.基本上,您可以根据需要重新配置mnesia表位置,但通常会将表复制到内存中,以使它们保持接近.

集群ejabberd也是通过mnesia集群上的生成节点完成的,因此可能不值得努力摆脱它.

大多数mod(实现xeps)使用mnesia但是它们具有mysql等价物.它甚至更宽 - 它们具有SQL等价物,后缀为"_odbc".示例:mod_roster和mod_roster_odbc.

总而言之,你最终可以使用轻量级的mnesia来处理配置和一些内存中的东西,并使用中央mysql来处理繁重的东西.mysql的位置可在ejabberd配置中配置.


tsa*_*oth 3

Mnesia 可以相当轻松地支持集群,但它确实需要在交互式会话中进行一些修改erl。至于确切的机制,这一切都是由 erlang 和 mnesia 内置的集群来处理的,这超出了我的专业知识。您可以告诉它在每个节点上存储副本(副本),但它是一个细粒度的控制,需要根据您的需求进行调整,正如本文档的第一条评论所建议的那样。不幸的是,我找不到任何有关碎片如何工作的信息,尽管我怀疑 mnesia 会缓存(在内存中或在磁盘上,取决于配置)它从另一个节点检索的任何结构。

您可能会看一下这篇文章,因为它解释了 SQL 的一些注意事项 - 即使用它不会消除 ejabberd 中 Mnesia 的使用。似乎共享 mysql 主机是一种选择,或者在 mysql 集群功能中使用主从复制配置也可能有效,因为共享 SQL 服务器可以工作。