eJabberd leave_cluster 失败

eJabberd leave_cluster 失败

eJabberd 版本:22.05
操作系统:Ubuntu 18.04 LTS
安装:来自源代码

我们有一个 ejabberd 集群,其中三个节点具有下面列出的节点名称。

  1. [电子邮件保护]
  2. [电子邮件保护]
  3. [电子邮件保护]

当我们尝试使用命令从集群中删除节点时

ejabberdctl leave_cluster '[email protected]'

该命令在节点 ltxmpp2.gims 上发出,引发错误。

ejabberd@ltxmpp2:~$ ejabberdctl leave_cluster'[电子邮件保护]'
与节点的 RPC 连接失败 '[电子邮件保护]':{'EXIT',{undef,
[{erl_error,format_exception,[2,error,undef,[{net_adm,ping,['[电子邮件保护]'],
[]}, {ejabberd_cluster_mnesia,
leave,1,
[{file, "src/ejabberd_cluster_mnesia.erl"},
{line,78}]}, {ejabberd_ctl, call_command, 4, [{file, "src/ejabberd_ctl.erl"},
{line, 332}]}, {ejabberd_ctl, try_call_command, 4, [{file, "src/ejabberd_ctl.erl"},
{line, 297}]}, {ejabberd_ctl, process2,4, [{file, "src/ejabberd_ctl.erl"},
{line, 235}]}, {ejabberd_ctl, process,2, [{file, "src/ejabberd_ctl.erl"},
{line, 213}]}, {erpc, execute_call, 4, [{file, "erpc.erl"},
{line, 392}]}], #Fun<misc.6.97582168>, #Fun<misc.7.97582168>], []},
{ejabberd_ctl, try_call_command, 4, [{file, "src/ejabberd_ctl.erl"},
{line,315}]}, {ejabberd_ctl, process2,4, [{file, "src/ejabberd_ctl.erl"},
{line,235}]}, {ejabberd_ctl, process,2, [{file, "src/ejabberd_ctl.erl"},
{line,213}]}, {ejabberd_ctl, process,1, []}]}}\

启动 ejabberd 节点的命令:

  start            Start in server mode
  foreground       Start in server mode (attached)
  foreground-quiet Start in server mode (attached), show only critical messages
  live             Start in interactive mode, with Erlang shell
  iexlive          Start in interactive mode, with Elixir shell

与正在运行的 ejabberd 节点交互的命令:

  debug            Attach an interactive Erlang shell to a running node
  iexdebug         Attach an interactive Elixir shell to a running node
  etop             Attach to a running node and start Erlang Top
  ping             Send ping to the node, returns pong or pang
  started|stopped  Wait for the node to fully start|stop

启动ejabberd节点时的可选参数:

  --config-dir dir   Config ejabberd:    /usr/local/etc/ejabberd
  --config file      Config ejabberd:    /usr/local/etc/ejabberd/ejabberd.yml
  --ctl-config file  Config ejabberdctl: /usr/local/etc/ejabberd/ejabberdctl.cfg
  --logs dir         Directory for logs: /usr/local/var/log/ejabberd
  --spool dir        Database spool dir: /usr/local/var/lib/ejabberd
  --node nodename    ejabberd node name: [email protected]

谁能解释一下错误的原因?

答案1

安装:从源代码

这意味着您从 ubuntu 安装了 erlang 包,并从源代码编译了 ejabberd。

错误,undef,[{net_adm,ping,['[电子邮件保护]'], []},

如果我理解正确的话,那条长错误消息中最相关的部分就是那行。

这句话可能意味着:

  • A)无法找到 Erlang 模块 net_adm.beam,
  • B) 或者模块不包含一个带有一个参数的名为 ping 的函数。

让我们进一步深入研究您的安装,看看具体的问题是什么。

A.1) ubuntu 中的文件 net_adm.beam 包含在 erlang-base 包中。您安装了该包吗?

https://packages.ubuntu.com/search?searchon=contents&keywords=net_adm.beam&mode=exactfilename&suite=kinetic&arch=any

安装好了吗?然后:

A.2) 自己检查一下 net_adm:ping 函数是否可以在你的 Erlang 安装中使用:

$ erl
Erlang/OTP 25 [erts-13.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns]

Eshell V13.2  (abort with ^G)
1> net_adm:ping('aaaa').               
pang
2> q().

它在简单的 Erlang shell 中可以工作吗?然后:

A.3) 检查你的 ejabberd 安装是否可以使用函数 net_adm:ping:

$ ejabberdctl live
...
(ejabberd2@localhost)1> net_adm:ping('aaaa').
pang
(ejabberd2@localhost)2> q().
ok

B) 该函数很久以前就包含在 Erlang 中了...您安装的是哪个版本的 Erlang?

相关内容