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.cookie 和 ejabberd.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 但添加后我无法访问网络管理员。
如果您不想要来自任何节点的任何旧数据,那么您可以按照以下步骤进行聚类。
- 停止所有节点
- 使用 rm-rf opt/ejabberd-16.09/database
删除所有三个节点中 opt/ejabberd-16.09/database 目录中的所有内容
- 根据 'ejabberd@hostname' 在所有三个节点中更改 ERLANG_NODE,其中主机名应该是可路由的
- 重启所有节点
- 现在使用 ejabberdctl 从节点 1 加入集群到节点 2 join_cluster 'ejabberd@node2'
- 之后转到节点 3 并使用与上面相同的命令 ejabberdctl join_cluster 'ejabberd@node2'
- 您的集群应该已设置好 now.It 可以通过 ejabberdctl 检查 list_cluster
我以 root 身份工作并使用 centos7。 我已经使用 RPM 包在两台不同的机器上安装了 ejabberd 16.09。在这两种情况下,我都有相同的节点名(ejabberd@localhost)和相同的主机(ejabberd.c.southern-silo-174209.internal) 因为我将第一台机器的磁盘克隆到第二台机器上。一切正常。
当我想对这些机器进行集群时出现了问题。由于磁盘是克隆的,所以我在两台机器上都有 .erlang.cookie 和 ejabberd.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 但添加后我无法访问网络管理员。
如果您不想要来自任何节点的任何旧数据,那么您可以按照以下步骤进行聚类。
- 停止所有节点
- 使用 rm-rf opt/ejabberd-16.09/database 删除所有三个节点中 opt/ejabberd-16.09/database 目录中的所有内容
- 根据 'ejabberd@hostname' 在所有三个节点中更改 ERLANG_NODE,其中主机名应该是可路由的
- 重启所有节点
- 现在使用 ejabberdctl 从节点 1 加入集群到节点 2 join_cluster 'ejabberd@node2'
- 之后转到节点 3 并使用与上面相同的命令 ejabberdctl join_cluster 'ejabberd@node2'
- 您的集群应该已设置好 now.It 可以通过 ejabberdctl 检查 list_cluster