erlang - ejabberd集群,当master宕机时Slave不工作

标签 erlang ejabberd mnesia

我已经设置了 ejabberd 集群,一个是主站,另一个是从站,如所述 here .

我已将 .erlang.cookie 和数据库文件从主服务器复制到从服务器。 一切正常。
问题是当我停止主节点时:

  1. 然后就没有请求被路由到从属设备。
  2. 当尝试重新启动从属节点时,它一旦关闭就无法启动。

我被困在这里了,请帮帮我。 谢谢

最佳答案

这是 Mnesia 的标准行为。如果您启动的节点不是集群中最后一个停止的节点,那么它没有任何方法知道它是否拥有最新的数据。

启动 Mnesia 集群的过程是以与关闭相反的顺序启动节点。

如果最后在 Mnesia 集群上看到的节点无法启动或加入集群,您需要使用 Mnesia 命令强制集群成为“master”,即告诉它您认为该节点拥有最多的可用资源迄今为止的内容。这是通过使用 Erlang 命令 mnesia:set_master_nodes/1 来完成的.

例如,从 ejabberd Erlang 命令行:

mnesia:set_master_nodes([node1@myhost]).

在大多数情况下,Mnesia 集群会自动处理所有事情。当一个节点出现故障时,其他节点会意识到并自动继续透明地工作。您需要将哪个节点设置为引用数据的唯一情况(使用 set_master_nodes/1)是当这对于 Mnesia 来说不明确时,即仅启动仍在运行时已关闭的节点时节点或存在网络 split 时。

关于erlang - ejabberd集群,当master宕机时Slave不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34715119/

相关文章:

swift - 当其他用户同时不在线/离线时,聊天发送、阅读、接收如何工作?

erlang - 如何为使用 rebar 运行测试的 common_test 指定配置文件

php - 无法使用 PHP 在 Linux 中写入日志文件

timer - gen_server :call every X seconds

xmpp - BOSH模块未启动: Ejabberd/Strophe setup issue

erlang - 帮助我了解 mnesia (NoSQL) 建模

erlang - 将数据持久保存到本地 mnesia 表中

erlang mnesia创建表错误

sockets - erlang/elixir gen_tcp 连接 - 未连接但 telnet 会

二郎。使相对路径绝对