xmpp - ejabberd 聚类问题及解决方案
问题描述
设置详情
2 个以 postgresql 作为数据库的 ejabberd 节点(操作系统:Ubuntu 16.04)
尝试对两个 ejabberd 进行集群,如
https://docs.ejabberd.im/admin/guide/clustering/中所述
启动主节点后,在从节点上执行了以下步骤
- 复制 .erlang.cookie 到从节点
- 将 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] Application lager 在节点'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 [info] 应用程序 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 加载配置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 加载配置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 加载配置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 加载配置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 加载配置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 加载配置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 [错误] CRASH REPORT 进程 <0.67.0> 与 0 个邻居退出,原因是:ejabberd_config:get_config_option_key/2 中的第 473 行中没有与 <<>> 匹配的 case 子句 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调查问题并提供帮助。
解决方案
最后我找到了问题的解决方案问题是节点名称作为主节点的节点名称 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节点具有相同的值,则在slave中执行“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
我没有使用任何硬件负载平衡器进行负载平衡,需要检查一下
如果有人这样做,请在此处发布..
推荐阅读
- java - react-native-fbsdk错误编译失败找不到common.jar(android.arch.core:common:1.0.0)
- html - 在 Quiz Angular 5 中处理多个单选按钮
- mysql - 从另一个表中的多行更新 MYSQL 表
- python - 通过将 sklearn.predict 传递给 df.apply 对 Pandas 数据帧进行逐行预测
- javascript - 即使在 componentDidMount 之后也无法在未安装的组件上调用 setState
- c# - 在 SQL Server 中,Id Identity 列值有时会突然跳到 1000、10000 等
- c++ - 输入字符串::length()。我得到“无法解析标识符长度”
- javascript - 如果对象属性的值是“this”,会发生什么?
- javascript - 将 div 转换为下拉列表(使用数据值)
- java - java - 如何使用java 8 Streams找到两个String ArrayList之间的区别?