ejabberd-16.09 集群和名称节点问题

ejabberd-16.09 clustering and namenode issue

我以 root 身份工作并使用 centos7。 我已经使用 RPM 包在两台不同的机器上安装了 ejabberd 16.09。在这两种情况下,我都有相同的节点名(ejabberd@localhost)和相同的主机(ejabberd.c.southern-silo-174209.internal) 因为我将第一台机器的磁盘克隆到第二台机器上。一切正常。

当我想对这些机器进行集群时出现了问题。由于磁盘是克隆的,所以我在两台机器上都有 .erlang.cookieejabberd.yml 的精确副本(我验证了个人的内容)。现在,当我在任何一台机器上执行此命令时,ejabberdctl join_cluster "ejabberd@localhost" 我收到一条错误消息:{not_master,ejabberd@localhost}。这看起来很自然,因为当我有两个相同的节点名时如何形成集群。

为了克服这个问题,我在我的第二台机器上新安装了 ejabberd。但令我惊讶的是,它再次给了我 same nodename!!(ejabberd@localhost) 所以要实现集群,很自然的事情就是改变节点名。好的,让我们试试吧!

按照这些步骤 ejabberd change nodename guide

我能够一直执行到第 3 步。

[OLDNODE=ejabberd@localhost 和 NEWNODE=ejabberd@myfirstmachine 其中 myfirstmachine 是我计算机的主机名]

对于第 4 步,我在我的系统中找不到任何 /var/lib/ejabberd 目录(可能是因为我没有创建用户 ejabberd)。相反,我在 /opt/ejabberd-16.09/database 中找到了这个名为 "ejabberd@localhost" 的目录,其中包含所有 .DAT、.DCD 和 .DCL 文件。所以我创建了一个文件夹 /opt/ejabberd-16.09/database/oldfiles 并将所有文件从 ejabberd@localhost 目录迁移到这个目录。

接下来一切顺利,直到第 6 步。当我执行第 7 步时,出现以下错误。

无法从节点 ejabberd@localhost 的“/tmp/new.backup”安装回退:{"Cannot install fallback", {"No disc resident schema on local node", [ejabberd@myfirstmachine]}}

所以我卡在这里了。我只想实现不同机器的集群。我对名称节点不感兴趣。我什至尝试了另一种技术,那就是在 ejabberdctl.cfg 中添加 ERLANG_NODE 但添加后我无法访问网络管理员。

如果您不想要来自任何节点的任何旧数据,那么您可以按照以下步骤进行聚类。

  1. 停止所有节点
  2. 使用 rm-rf opt/ejabberd-16.09/database
  3. 删除所有三个节点中 opt/ejabberd-16.09/database 目录中的所有内容
  4. 根据 'ejabberd@hostname' 在所有三个节点中更改 ERLANG_NODE,其中主机名应该是可路由的
  5. 重启所有节点
  6. 现在使用 ejabberdctl 从节点 1 加入集群到节点 2 join_cluster 'ejabberd@node2'
  7. 之后转到节点 3 并使用与上面相同的命令 ejabberdctl join_cluster 'ejabberd@node2'
  8. 您的集群应该已设置好 now.It 可以通过 ejabberdctl 检查 list_cluster