You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

eJabberd 22.05执行leave_cluster命令移除节点失败问题求助

eJabberd 22.05执行leave_cluster命令移除节点失败问题求助

从你提供的错误日志和环境信息来看,这个问题的核心原因大概率是Erlang OTP版本不兼容,结合你的Ubuntu 18.04系统环境,我来具体拆解一下:

错误关键点分析

你看到的错误栈里最关键的部分是:

{undef,
[{erl_error,
format_exception,
[2,error,undef,
[...]

erl_error模块以及它的format_exception/6函数是Erlang OTP 24版本才新增的功能,而eJabberd 22.05官方明确要求依赖Erlang OTP 24.0及以上版本。但Ubuntu 18.04 LTS默认仓库提供的Erlang版本是OTP 21.x,这个版本里根本没有erl_error模块,所以当ejabberd尝试调用这个函数时就会抛出undef(未定义)的错误,进而导致RPC连接失败。

另外还有一个小细节:你是在要移除的节点ltxmpp2.gims上执行ejabberdctl leave_cluster 'ejabberd@ltxmpp2.gims',虽然ejabberd文档允许在目标节点上执行这个命令,但更稳妥的方式是在集群中其他正常运行的节点(比如ltxmpp1或ltxmpp3)上执行该命令,指定要移除的节点名称,这样可以避免目标节点自身状态异常导致的RPC问题。

解决建议

  • 检查并升级Erlang版本
    先执行erl -version确认当前系统的Erlang版本,如果确实是低于OTP 24的版本,需要添加Erlang Solutions的软件源来安装兼容版本:
    wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
    sudo dpkg -i erlang-solutions_2.0_all.deb
    sudo apt update
    sudo apt install erlang
    
  • 重新编译ejabberd
    因为你是从源码安装的ejabberd,需要用升级后的Erlang版本重新编译安装,确保ejabberd的编译环境和运行环境版本一致:
    cd /path/to/ejabberd-source
    make clean
    make
    sudo make install
    
  • 正确执行移除节点命令
    在集群中正常运行的节点(比如ltxmpp1.gims)上执行:
    ejabberdctl leave_cluster 'ejabberd@ltxmpp2.gims'
    
    执行前确保目标节点ltxmpp2处于运行状态,或者如果已经停止,可以使用ejabberdctl force_leave_cluster命令强制移除。

备注:内容来源于stack exchange,提问作者abby murali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 16:24:51