RabbitMQ报错[ERROR: node with name 'rabbit' already running on 'localhost']

这个报错是在执行./rabbitmq-server -detached的时候报出来的,除了这句以外没有任何信息。这个报错的本意是rabbit@localhost已经在运行了,不允许再启动一个实例。于是尝试干掉已有的进程:

ps aux | grep rabbit

执行后发现没有任何进程。尝试Google类似的问题,找了很久终于发现一个可能的问题——/etc/hosts文件可能被改出问题了。

这要回到RabbitMQ的一个基本认识上,它是通过hostname来唯一确定本机的,甚至包括队列存储都与hostname直接对应,如果hostname被改了,意味着实例本身都变化了。于是执行

hostname -s

发现居然没问题,还是localhost。所以,的确感觉非常奇怪。

进一步检查/etc/hosts文件,发现无意间把localhost指向了局域网内的另一台机器:

192.168.1.56 localhost

于是终于找到原因了,RabbitMQ启动时检查localhost,发现上面已经启动了一个RabbitMQ实例,于是报了最前面的错误。只需要去掉hosts文件里的配置就好了。

上面说的是主要原因,另一个意外操作导致这个错误的原因是erlang的守护进程被其它用户启动了,这可以通过:

ps aux | grep epmd

检查。需要干掉这个进程才能顺利把RabbitMQ启动起来。