我自己遇到了这个问题。Mongoose 使用 erlangs 内部mnesia
存储系统来存储包括集群拓扑在内的大量信息。mnesia 的默认存储路径是/var/lib/mongooseim
. 当您执行 amongooseimctl join_cluster ...
时,它需要擦除它的 mnesia 存储,并且基本上从它正在加入的集群中提取一个副本。出现问题是因为它还尝试删除/var/lib/mongooseim
自身,但它没有权限这样做,因为正在运行的用户mongooseim
没有父目录的权限,/var/lib
. 也不应该。
我解决这个问题的方法是创建一个子目录,它可以安全地删除和重新创建它,并将其配置为使用它作为 mnesia 目录:
sudo mkdir /var/lib/mongooseim/mnesia
sudo chown mongooseim:mongooseim /var/lib/mongooseim/mnesia
mnesia 目录的配置默认存在于/etc/mongooseim/app.config
. 在我的那里是第三行。最初看起来像这样:
{mnesia, [{dir, "/var/lib/mongooseim"}]},
我将路径更改为我创建的新目录
{mnesia, [{dir, "/var/lib/mongooseim/mnesia"}]},
之后,我停止并启动了mongoose,并成功加入了集群
mongooseimctl stop
mongooseimctl start && mongooseimctl started
mongooseimctl join_cluster mongooseim@other.node.name