我正在使用安装了ejabberd 13.12的2个ec2实例。我遵循这个指南来设置集群。在第二个节点上,当我运行命令-
erl -sname ejabberd
-mnesia dir '"/var/lib/ejabberd/"'
-mnesia extra_db_nodes "['ejabberd@first']"
-s mnesia
第一个节点出现错误-
Application ejabberd started on node ejabberd@ejabberdn1
dets: file "/var/lib/ejabberd/schema.DAT" not properly closed, repairing ...
=SUPERVISOR REPORT==== 27-May-2014::07:11:59 ===
Supervisor: {local,mnesia_kernel_sup}
Context: child_terminated
Reason: killed
Offender: [{pid,<0.152.0>},
{name,mnesia_locker},
{mfargs,{mnesia_locker,start,[]}},
{restart_type,permanent},
{shutdown,3000},
{child_type,worker}]
=SUPERVISOR REPORT==== 27-May-2014::07:11:59 ===
Supervisor: {local,mnesia_kernel_sup}
Context: shutdown
Reason: reached_max_restart_intensity
Offender: [{pid,<0.152.0>},
{name,mnesia_locker},
{mfargs,{mnesia_locker,start,[]}},
{restart_type,permanent},
{shutdown,3000},
{child_type,worker}]
给出了在第二个节点上进行mnesia网络分区的错误。如何解决这个问题?
最好清除本地数据库文件,并在设置主机名等之后重新生成它们。
我按照本指南在两个节点上运行到第5步,然后(因为我不想使用这个自定义模块进行数据库同步),我去了您提到的指南,并像您目前尝试的那样手动执行数据库同步。(我仍然花了半天的时间来追踪所有的错误,但在上面提到的指南和谷歌错误信息从日志文件最终解决了。;)
最后,我解决了我的问题。问题是与Erlang OTP版本。我使用Ejabberd 13.12和Erlang OTP 15B1。尽管这种组合在本地网络中工作得很好,但在AWS EC2上却不能工作。现在我已经用OTP 17取代了Erlang OTP版本,我的集群工作得很好。