ejabberd集群问题和解决方案

时间:2019-01-17 13:24:11

标签: xmpp ejabberd

设置详细信息

2个以PostgreSQL作为数据库的ejabberd节点(OS:Ubuntu 16.04)

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

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

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

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

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

Eshell V9.2(用^ G中止) (ejabberd @ gim-Veriton-M6650G)1> 18:29:41.856 [notice]将/usr/local/var/log/ejabberd/error.log的loghwm更改为100 18:29:41.856 [notice]将/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]在节点'ejabberd @ gim-Veriton-M6650G'上启动了应用sasl 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 [info]在节点'ejabberd @ gim-Veriton-M6650G'上启动了应用ssl 18:29:41.881 [info]应用p1_utils在节点'ejabberd @ gim-Veriton-M6650G'上启动 18:29:41.883 [info]在节点'ejabberd @ gim-Veriton-M6650G'上启动了fast_yaml应用程序 18:29:41.888 [info]在节点'ejabberd @ gim-Veriton-M6650G'上启动了fast_tls应用程序 18:29:41.892 [info]在节点'ejabberd @ gim-Veriton-M6650G'上启动了应用程序fast_xml 18:29:41.895 [info]在节点'ejabberd @ gim-Veriton-M6650G'上启动了应用程序字符串准备 18:29:41.899 [info]在节点'ejabberd @ gim-Veriton-M6650G'上启动了应用程序xmpp 18:29:41.903 [info]应用程序cache_tab在节点'ejabberd @ gim-Veriton-M6650G'上启动 18:29:41.910 [info]在节点'ejabberd @ gim-Veriton-M6650G'上启动了应用程序eimp 18:29:41.910 [info]从/usr/local/etc/ejabberd/ejabberd.yml加载配置 18:29:41.913 [错误]崩溃报告过程<0.67.0>,其中0个邻居退出,原因是:ejabberd_config:get_config_option_key / 2行473中application_master:init / 4行134中没有匹配<< >>的case子句 18:29:41.913 [info]应用程序ejabberd退出的原因是:ejabberd_config:get_config_option_key / 2第473行中没有匹配<< >>的case子句

(ejabberd @ gim-Veriton-M6650G)1>

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

ejabberdctl状态显示ejabberd没有在该节点上运行

请问一些问题可以寻求帮助。

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决问题的方法 问题在于将节点名称作为主节点的节点名称或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。以实时模式启动从节点

6。使用命令“ erlang:get_cookie()”在两个节点的erlang控制台中检查cookie值。 ,这两个节点应具有相同的值。

7。如果僵尸节点的值相同,则在从属服务器中执行“ ejabberdctl --not-timeout join_cluser ejabberd @ nodename”。  根据您的环境更改ejabberd @ nodename。 在我的情况下,我以节点名称为ejabberd @ cluster-node1的'ejabberd'用户运行了ejabberd(如果您希望也可以使用eQabberd@example.com之类的FQDN)

8。如果执行了abode命令而没有任何错误,则表明节点在群集中

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

10.Hurrayyyy,您完成了...

要实现群集的负载平衡,您可以使用HAProxy

请参阅https://blog.onefellow.com/post/76702632637/haproxy-and-ejabberd了解详情

我尚未使用任何硬件负载平衡器完成负载平衡,需要检查一下

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