Ejabberd 聚类理解

Posted

技术标签:

【中文标题】Ejabberd 聚类理解【英文标题】:Ejabberd Clustering understanding 【发布时间】:2014-01-14 19:15:20 【问题描述】:

假设我有two ejabberd server,考虑XY,它们具有相同的源,并且我使用this 为这些服务器进行了ejabberd 集群。现在考虑AB 是用户,它们在X server 中连接。 A 和 B 都处于ONLINE 状态,它们通过X server 连接。如果假设 X 服务器通过某些问题得到 shutdowncrashed。在此场景中,AB 是否处于 OFFLINE 状态或 AB 处于 ONLINE 状态,由 Y 服务器处理。我不知道我的想法对不对。如果有人给我关于它的建议。

【问题讨论】:

【参考方案1】:

如果您的节点位于不同的物理位置,则应将它们设置为单独的集群(即使它是 1 个节点的集群)并将它们联合起来。集群只能在数据中心级别进行,因为集群中的所有节点之间都存在 mnesia 事务锁(例如创建 MUC 房间)。

【讨论】:

在这种情况下,一旦服务器 X 崩溃,它将中断 A 和 B 的套接字连接,并且服务器 Y 最终会看到服务器 X 已关闭(在一定时间后)。当 Y 认为服务器 X 已关闭时,它将清理该节点上的所有会话,因此 A 和 B 会话将被视为离线,并且他们的任何在线朋友将被发送一个“不可用”的出席信息节。客户端 A 和 B 在看到他们的套接字连接断开后需要重新登录(到 Y)以重新建立服务。【参考方案2】:

“负载平衡”不是您在问题中描述的内容。

在负载平衡中,传入连接以平衡的方式分布在多个节点上。这样一来,没有一台服务器的负载太高(因此得名“负载平衡”)。如果您的负载均衡器足够智能,可以检测和删除死节点,它还提供故障转移功能。

只要您的集群中至少有一个工作节点,智能负载均衡器就可以让 连接始终成功。但是,在您的问题中,您谈论的是客户端“维护连接”。那是完全不同的东西。

为此,您要么需要无状态连接,要么需要每个客户端都连接到所有节点。这不是 XMPP 的工作方式:它是与单个服务器的有状态连接。如果客户端断开连接,您必须依靠客户端重新连接。

【讨论】:

我编辑了我的问题,你能给我你的建议吗? 你的问题已经说得更清楚了,但答案还是一样:你似乎不理解这里的一些基本概念。

以上是关于Ejabberd 聚类理解的主要内容,如果未能解决你的问题,请参考以下文章

格式:“读取 /opt/ejabberd/.erlang.cookie 时出错:eacces”

ejabberd 两个同名函数

EJabberD-编辑EJabberD CONF

ejabberd add_rosteritem process_rosteritems

ejabberd在windows10下的配置文件ejabberd.yml存放路径

ejabberd -- 在 ejabberd 上设置昵称在我注销之前不会反映 Pidgin/Empathy