Ejabberd 聚类理解
Posted
技术标签:
【中文标题】Ejabberd 聚类理解【英文标题】:Ejabberd Clustering understanding 【发布时间】:2014-01-14 19:15:20 【问题描述】:假设我有two ejabberd server
,考虑X
和Y
,它们具有相同的源,并且我使用this 为这些服务器进行了ejabberd 集群。现在考虑A
和B
是用户,它们在X server
中连接。 A 和 B 都处于ONLINE
状态,它们通过X server
连接。如果假设 X 服务器通过某些问题得到 shutdown
或 crashed
。在此场景中,A
和 B
是否处于 OFFLINE
状态或 A
和 B
处于 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 add_rosteritem process_rosteritems