2个以PostgreSQL作为数据库的ejabberd节点(OS:Ubuntu 16.04)
尝试对两个ejabberd进行聚类,
https://docs.ejabberd.im/admin/guide/clustering/
启动主节点后,已在从节点上执行以下步骤
从站成功启动,但显示以下错误。
=====错误=========
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子句
我也尝试过重新创建mnesia DB,但没有帮助。
ejabberdctl状态显示ejabberd没有在该节点上运行
请问一些问题可以寻求帮助。
答案 0 :(得分:0)
最后,我找到了解决问题的方法 问题在于将节点名称作为主节点的节点名称或FQ名称 但是从属节点的名称没有域。 还在/ etc / hosts文件
中添加了两个节点名称。在启动之前,请在两个节点的/ 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了解详情
我尚未使用任何硬件负载平衡器完成负载平衡,需要检查一下
如果有人这样做,请在此处发布。.