如何在 ejabberd 集群中平衡 MUC 进程

How to balance MUC processes in an ejabberd cluster

我们有一个包含大约 700,000 个持久聊天室的 ejabberd 集群。我们面临的问题是,启动集群的第一个节点大约需要 1 小时,因为所有房间的 Erlang 进程都在该节点上启动。

即使在集群初始化后,我们说有 4 个节点 运行,MUC 进程在节点之间也不平衡。可能有一个节点使用了 90% 的内存,而另一个节点使用了 5%。

有没有办法一次性启动一个集群的多个节点,让MUC负载从一开始就均匀分布,启动更快?

谁能提出平衡集群节点之间 MUC 进程的解决方案?

现在的工作方式显然是不可扩展的,因为随着房间数量的增加,我们需要在集群中启动的第一个节点上越来越多的内存,同时启动时间也会增加。

非常感谢, 亚历克斯

目前的ejabberd社区版没有这个功能。您需要一个定制的 MUC 模块来满足您特定的大量房间需求。更重要的是在集群中对 MUC 进行负载平衡。您需要以牺牲存储和 CPU.

为代价,针对大规模 RAM 进行积极优化

您可以加​​载当时需要的 MUC 房间 dynamically.Whenever 只有您使用旧选项启动房间(永久房间意味着使用旧配置启动房间)。

使用这个机制,这两个问题都将得到解决: 1) Ejabberd 启动时间(不启动任何 MUC 房间,因为它是在需要的基础上) 2)负载平衡(因为如果那个房间的第一个请求转到其他节点,那么房间将在那里创建。