2013-03-28 68 views
6

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

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

回答

3

Mnesia可以很容易地支持群集,但它在交互式erl会话中确实支持require some tinkering。就确切机制而言,它全部由erlang和mnesia内置的集群来处理,并且超出了我的专业知识。您可以告诉它在每个节点上存储副本(副本),但它是一个细粒度的控件,需要根据您的需求进行调整,如this document的第一条评论所暗示的。不幸的是,我找不到有关碎片工作的任何信息,尽管我怀疑mnesia会缓存(在内存或光盘上,取决于配置)从其他节点检索到的任何结构。

您可能需要一个look at this,因为它解释了SQL的注意事项 - 即使用它不会消除在ejabberd中使用Mnesia。看起来共享mysql主机将是一个选项,或者在mysql的集群功能中使用主从复制配置也可能工作,因为共享SQL服务器可以工作。

6

默认情况下,一切都会去mnesia和大部分的东西是复制。你也可以选择mnesia表格是否转到光盘或内存。基本上,您可以根据需要重新配置mnesia表格的位置,但通常表格会复制到内存中,以保持关闭。

集群ejabberd通过跨越节点通过mnesia集群完成也是事实,所以可能不值得努力摆脱它。

大多数mods(实现xeps)使用mnesia,但是他们有mysql等价物。它甚至更宽 - 它们具有以“_odbc”作为后缀的SQL等价物。例如:mod_roster和mod_roster_odbc。总结一下,你可以用轻量级mnesia来处理配置和一些内存中的东西,并使用中央mysql来处理沉重的东西。 mysql的位置可以在ejabberd配置中配置。

+0

我的目标是创建最简单的设置,通过添加更多节点,可以轻松地增长到任何需要的大小(10M * n活动次数..)。想到3件事。 (A)。随着mnesia表大小限制本地内容表,而不是复制听起来像一个更好的选择乍一看只有mnesia设置。 (B) (B)。没有将任何内容外化到MySQL,并严格依赖mnesia设置将是最简单的设置。 (C)。一个非常大的部署需要一个集中的MySQL DB还是mnesia可以切断它? – 2013-03-29 13:33:19

+1

我遇到的大多数eJabberd部署都是混合安装,他们使用集中式mysql(它很容易复制,易于被系统的另一层访问)。你的意思是mnesia表的大小限制?在内存表中没有限制,并且在大多数情况下,出于性能原因您需要内存中的位置。 – user425720 2013-03-29 18:12:21