Ejabberd如何为集群管理数据库



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

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

默认情况下,所有内容都保存到内存中,并且大多数内容都被复制。此外,您还可以选择是将记忆表放入磁盘还是内存。基本上,您可以根据需要重新配置mnesia表的位置,但通常表是在内存中复制的,以保持它们之间的距离。

集群ejabberd也是通过mnesia集群上的生成节点完成的,所以可能不值得努力去摆脱它。

大多数mod(实现xeps)使用内存记忆,但他们有mysql等同。它甚至更广——它们有以"_odbc"为后缀的SQL等同物。例如:mod_roster和mod_roster_odbc。

总之,你可以用轻量级的记忆来处理配置和一些内存中的东西,用中央mysql处理重的东西。mysql的位置可以在ejabberd config中配置

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

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

最新更新