57

我正在为我的 django 项目使用 django-celery。昨天我更改了计算机的主机名(我使用的是 Ubuntu 12.04,编辑了文件'/etc/hostname'),下次重新启动后 django-celery 失败并出现错误

Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 4 seconds...

在对此错误进行一些研究后,我发现,更改我的主机名从这里导致了这个错误。我的 rabbitmq 启动日志显示

文件:/var/log/rabbitmq/startup_log

Activating RabbitMQ plugins ...

********************************************************************************
********************************************************************************

0 plugins activated:

ERROR: epmd error for host "jinesh": nxdomain (non-existing domain)

我的 startup_err 文件是空的。

当我跑步时

root@jinesh:/home/jinesh# rabbitmqctl list_users
Listing users ...
Error: unable to connect to node rabbit@jinesh: nodedown

DIAGNOSTICS
===========

nodes in question: [rabbit@jinesh]

hosts, their running nodes and ports:
- unable to connect to epmd on jinesh: nxdomain

current node details:
- node name: rabbitmqctl4956@jinesh
- home dir: /var/lib/rabbitmq
- cookie hash: RGhmB2JR1LbZ57j7xWWTxg==

我希望更改节点名可以解决此问题。但我找不到这样做的方法。任何人都知道如何解决这个问题?

更新

在更改主机名时,您必须同时更改/etc/hostname/etc/hosts文件。

我重新安装了rabbitmq并解决了这个问题,将回答这个问题。

4

13 回答 13

57

删除旧安装的 RabbitMQ 以解决此问题。以下是重新安装 RabbitMQ 的步骤。这些命令以 root 用户身份运行:

  1. 停止 RabbitMQ:rabbitmqctl stop

  2. 改变/etc/hosts

  3. 改变/etc/hostname

  4. 卸载旧的 RabbitMQ:dpkg -P rabbitmq-server

  5. 删除 RabbitMQ 的数据库:rm -rf /var/lib/rabbitmq

  6. 找到运行rabbit的erlang进程:ps ax | grep rabbit

  7. 杀死列出的进程

  8. 重新安装 RabbitMQ:apt-get install rabbitmq-server

我在我的博客上写了这些步骤。

修订

我把我的博客搬到了一个新网站。

于 2013-06-06T22:06:02.663 回答
42

感谢理查德 H 冯。

他的步骤帮助我解决了这个问题。

但我不必重新安装 rabbitmq

当我打开我的/etc/hosts文件时,我发现IP分配给我的主机名与实际的ip(192.168.1.200 [static]).

#/etc/hosts  
127.0.0.1       localhost  
192.168.1.115   HOSTNAME

所以我只是将IP地址更改为192.168.1.200我的/etc/hosts文件中,它工作正常。

于 2014-08-07T07:36:17.350 回答
25

理查德的回答很好,但是你可能会在 rabbitmq 队列中丢失一些信息。以下是使用新主机名保留先前设置的 rabbitmq 的可能方法。

一个简短的回答:

如果要保留新主机名的更改,则可以在其中创建一个引用旧主机名的rabbitmq-env.conf文件/etc/rabbitmq,一切都应该很好。以下是文件中应包含的rabbitmq-env.conf内容:

NODENAME=rabbit@OLDHOSTNAME

添加配置文件后,重新启动rabbitmq服务器就可以了。(例如service rabbitmq-server restart(可能需要一个sudo带有 ubuntu 的))

有关更多详细信息,您可以从 rabbitmq 网站阅读:https ://www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html

有关答案的更多详细信息:

我在使用 CentOS 时遇到了类似的主机名问题......根本问题是当 rabbit 安装时,它在安装时引用了当前主机名。由于这是 rabbitmq 的事情,该解决方案应该适用于其他 linux 风格。如果您想查看完整答案,可以在以下位置查看:rabbtimqadmin - 无法连接:[Errno -2] Name or service not known

于 2015-08-13T00:51:19.003 回答
6

您可以通过删除与rabbitmq 关联的erlang mnesia 数据库或重新安装rabbitmq 来解决此问题。

我从rabbitmq mailing list得到了第一个解决方案的提示。摘自答案,The Erlang Mnesia database is host specific (because it is a distributed DB). The simplest way to get you fixed is to clear out the database dir.

第二种方法是最简单的方法(虽然不推荐)。卸载做

dpkg -P rabbitmq-server

如果您想了解有关安装/删除 debian 软件包的更多信息,可以参考此链接。

于 2013-02-02T08:25:07.250 回答
5

在 Windows 上,我面临的问题是由于 McAfee 防火墙。确切的错误是:

主机“<HOSTNAME>”的 epmd 错误:地址(无法连接到主机/端口)

我禁用防火墙后它就开始工作了

于 2014-05-13T01:09:52.300 回答
4

删除 RabbitMQ 数据库:rm -rf /var/lib/rabbitmq/*

这个动作解决了问题。我相信转储中的某处存储了与节点主机名和 ips 对应的记录。如果某些主机意外更改,这一事实会引起矛盾。

于 2015-02-13T11:15:48.700 回答
3

我的解决方案是检查并更正$HOSTNAMEand /etc/hostname。原来我的路由器有点糊涂,给了我一个错误的主机名域。重新启动这个后,我打电话export HOSTNAME=the.correct.hostname,我的兔子在没有重新启动服务器操作系统的情况下运行。

于 2014-05-19T20:46:07.060 回答
3

就我而言,我没有以下条目/etc/hosts

127.0.0.1 <hostname>

我的机器的主机名在哪里<hostname>(由hostname命令给出)。添加该行后,RabbitMQ 成功启动。我没有任何早期的 RabbitMQ 安装。

于 2016-01-25T15:31:32.767 回答
1

为了解决这个问题,我/etc/hostname用新的主机名更改了我的文件,然后重新启动了机器。之后,我跑了rm -rf /var/lib/rabbitmq/mnesia/*

然后重新启动服务:sudo service rabbitmq-server restart

在这一点上,它对我有用。如果它仍然不起作用,请/etc/rabbitmq/rabbitmq-env.conf通过添加这些信息来修改文件:

NODENAME=rabbit@YOUR_NEW_HOSTNAME
NODE_IP_ADDRESS=127.0.0.1
NODE_PORT=5672

然后重启服务:sudo service rabbitmq-server restart

希望能帮助到你。

于 2019-01-23T07:04:07.807 回答
1

在 Windows 上时(对不起——我知道这个主题是针对 Ubuntu 的)只需重新安装RabbitMQ服务:

rabbitmq-service.bat remove
rabbitmq-service.bat install

该脚本位于C:\Program Files\RabbitMQ Server\rabbitmq_server-<version>\sbin文件夹中。

或者可能只是改变值HKEY_LOCAL_MACHINE\SOFTWARE\Ericsson\Erlang\ErlSrv\1.1\RabbitMQ\@SName就足够了。

线索:https ://github.com/rabbitmq/rabbitmq-server/issues/620

于 2019-09-12T17:42:26.243 回答
0

我遇到了同样的问题,并且按照 Richard H Fung 提供的步骤对我没有帮助。我还必须卸载这些软件包:erlang erlang-epmd rabbitmq-server

zypper remove erlang erlang-epmd rabbitmq-server
rm -rf /var/lib/rabbitmq/*
zypper install erlang erlang-epmd rabbitmq-server
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service

如果您有其他操作系统而不是 openSUSE,只需使用您的包管理器删除这些包(例如apt-get

于 2016-06-17T06:43:14.957 回答
-1

唯一对我有用的解决方案:从 deb 安装 erlang & rabbitmq,所以:

首先删除:

apt-get purge rabbitmq-server
apt-get purge erlang
apt-get autoremove
reboot

安装 wget 后:

sudo apt-get -y install socat logrotate init-system-helpers adduser
sudo apt-get -y install wget

安装二郎:

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install erlang

安装rabbitmq:

sudo apt-get update
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.17/rabbitmq-server_3.7.17-1_all.deb
sudo dpkg -i rabbitmq-server_3.7.17-1_all.deb
rm rabbitmq-server_3.7.17-1_all.deb
于 2019-08-07T14:00:33.033 回答
-2

检查 qpidd 守护进程,它也可能已经占用了 rabbitmq 需要的端口。

sudo netstat -lnp
于 2015-05-04T16:26:57.503 回答