【问题标题】:ejabberd clustering problems and solutionsejabberd 聚类问题及解决方案
【发布时间】:2019-01-17 13:24:10
【问题描述】:

设置详情

2 个以 postgresql 作为数据库的 ejabberd 节点(操作系统:Ubuntu 16.04)

尝试对两个 ejabberd 进行聚类,如
https://docs.ejabberd.im/admin/guide/clustering/

启动主节点后,在从节点上执行了以下步骤

  1. 复制.erlang.cookie到从节点
  2. 将 ejabbed.yml 从主机复制到从机。

slave 启动成功,但显示以下错误。

=====错误=========

Eshell V9.2(使用 ^G 中止) (ejabberd@gim-Veriton-M6650G)1> 18:29:41.856 [通知] 将 /usr/local/var/log/ejabberd/error.log 的 loghwm 更改为 100 18:29:41.856 [通知] 将 /usr/local/var/log/ejabberd/ejabberd.log 的 loghwm 更改为 100 18:29:41.857 [info] 应用程序在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.860 [info] 应用程序加密在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.865 [info] 应用程序 sasl 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.871 [info] 应用程序 asn1 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.871 [info] 应用程序 public_key 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.880 [信息] 应用程序 ssl 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.881 [info] 应用程序 p1_utils 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.883 [info] 应用程序 fast_yaml 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.888 [info] 应用程序 fast_tls 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.892 [info] 应用程序 fast_xml 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.895 [info] 应用程序 stringprep 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.899 [info] 应用程序 xmpp 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.903 [info] 应用程序 cache_tab 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.910 [info] 应用程序 eimp 在节点“ejabberd@gim-Veriton-M6650G”上启动 18:29:41.910 [info] 从 /usr/local/etc/ejabberd/ejabberd.yml 加载配置 18:29:41.913 [错误] 崩溃报告进程 与 0 个邻居退出,原因是:没有 case 子句匹配 ejabberd_config:get_config_option_key/2 第 473 行中的 > 在 application_master:init/4 第 134 行 18:29:41.913 [info] 应用程序 ejabberd 退出,原因是:ejabberd_config:get_config_option_key/2 第 473 行中没有匹配 > 的 case 子句

(ejabberd@gim-Veriton-M6650G)1>

我也尝试过重新创建 mnesia DB,但没有帮助。

ejabberdctl status 显示 ejabberd 未在该节点中运行

能否请一些 oe 调查问题并提供帮助。

【问题讨论】:

  • 有人能确认一下master和slave上的ejabberd.yml文件是否完全相同..?
  • 是的,两个文件应该相同。阅读您的错误后,您的 ejabberd 配置文件中似乎存在语法错误。
  • 如果您需要集群,我可以推荐 Tigase XMPP Server (tigase.net) - 它具有集群自动发现功能,只需要提供相同的 JDBC url(数据库详细信息)

标签: xmpp ejabberd


【解决方案1】:

终于找到了解决问题的办法 问题在于节点名称作为主 ia FQ 名称的节点名称 但从节点的名称没有域。 还在 /etc/hosts 文件中添加了两个节点名称

ejabberd集群,请参考以下步骤。

在开始之前,在两个节点的 /etc/hosts 文件中配置正确的条目。 即节点应该使用它们的主机名相互解析。 在 ejabberd.cfg 文件中设置 ejaberd 节点名称,两个节点应该有不同的节点名称。

1.cofigure ejabberd 在一个具有正确节点名称(FQDN 或只是您方便的名称)的主节点中

2.使用与主节点相同的配置配置从节点,即。 bot 节点应该在 ejabberd.yml 文件中具有相同的配置)

3.将erlang.cookie从主节点复制到从节点,ejabberd用户应该可以读取cookie文件。

4.以直播模式启动主节点(ejabberdctl live)

5.以live模式启动slave节点

6.使用命令'erlang:get_cookie()'检查两个节点的erlang控制台中的cookie值。 ,两个节点的值应该相同。

7.如果 bot 节点具有相同的值,则在从站中执行“ejabberdctl --not-timeout join_cluser ejabberd@nodename”。 根据您的环境更改 ejabberd@nodename。 在我的情况下,我使用“ejabberd”用户运行 ejabberd,节点名称为 ejabberd@cluster-node1(如果您愿意,也可以使用 FQDN,例如 ejabberd@example.com)

8.如果abode命令执行没有任何错误,则节点在集群中

9. 使用命令 mnesia:info() 在任何 erlang 控制台中确认集群。在这里,您将在“running_db_nodes”中获得节点详细信息

10.Hurrayyyy 你完成了......

对于集群的负载均衡,你可以使用 HAProxy

详情请咨询https://blog.onefellow.com/post/76702632637/haproxy-and-ejabberd

我没有使用任何硬件负载平衡器进行负载平衡,需要检查一下

如果有人这样做,请在此处发布..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2013-05-18
    相关资源
    最近更新 更多