问题描述
我在我的django项目中使用django-celery。最后一天我更改了计算机的主机名(我正在使用Ubuntu 12.04,编辑文件’/etc/hostname’),并在下次重启后django-celery失败并出现错误
Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 4 seconds...
经过对此错误的一些研究后,我发现,更改我的主机名会导致here出现此错误。我的rabbitmq启动日志显示
file:/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并解决了这个问题,将回答这个问题。
最佳解决方案
删除RabbitMQ的旧安装以解决此问题。以下是重新安装RabbitMQ的步骤。这些命令以root用户身份运行:
-
停止RabbitMQ:
rabbitmqctl stop
-
更改
/etc/hosts
-
更改
/etc/hostname
-
卸载旧的RabbitMQ:
dpkg -P rabbitmq-server
-
删除RabbitMQ的数据库:
rm -rf /var/lib/rabbitmq
-
找到运行rabbit的erlang进程:
ps ax | grep rabbit
-
杀死列出的流程
-
重新安装RabbitMQ:
apt-get install rabbitmq-server
我在my blog上写了这些步骤。
修订
我将我的博客移到了一个新网站。
次佳解决方案
感谢Richard H Fung。
他的步骤帮助我解决了这个问题。
But I did not have to reinstall the rabbitmq.
当我打开我的/etc/hosts
文件时,我发现分配给我的主机名的IP
与实际的ip(192.168.1.200 [static])
不同。
#/etc/hosts
127.0.0.1 localhost
192.168.1.115 HOSTNAME
所以我只是在我的/etc/hosts
文件中将IP地址更改为192.168.1.200
并且工作正常。
第三种解决方案
理查德的答案很好,但你可能会在rabbitmq队列中丢失一些信息。以下是使用新主机名保留rabbitmq先前设置的可能方法。
简答:
如果要更改新主机名,则可以在/etc/rabbitmq
中创建引用旧主机名的rabbitmq-env.conf
文件,并且所有文件都应该是好的。以下是rabbitmq-env.conf
文件中应该包含的内容:
NODENAME=rabbit@OLDHOSTNAME
添加配置文件后,重新启动rabbitmq服务器,那么你应该很好。 (例如service rabbitmq-server restart
(可能需要带有ubuntu的sudo
))
有关详细信息,请访问rabbitmq网站:https://www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html
关于答案的更多细节:
我使用CentOS时有类似的主机名问题…根问题是当安装Rabbit时,它在安装时引用了当前的主机名。由于这是一个rabbitmq的东西,该解决方案应该适用于其他Linux风格。如果您想查看完整答案,可以在以下位置查看:rabbtimqadmin – Could not connect: [Errno -2] Name or service not known
第四种方案
您可以通过删除与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软件包的更多信息,可以参考此link。
第五种方案
在Windows上,我遇到的问题是由McAfee防火墙引起的。确切错误是主机“”的epmd错误:地址(无法连接到主机/端口)
一旦禁用防火墙,它就开始工作了
第六种方案
删除RabbitMQ数据库:rm -rf /var/lib/rabbitmq/*
此操作可以解决问题。我相信转储中的某个地方存储了一个记录,其中包含节点主机名和ips的对应关系。如果某些主机意外更改,这一事实会导致矛盾。
第七种方案
就我而言,我在/etc/hosts
中没有以下条目:
127.0.0.1 <hostname>
其中<hostname>
是我的机器的主机名(由hostname
命令给出)。添加该行后,RabbitMQ成功启动。我没有任何早期的RabbitMQ安装。
第八种方案
我的解决方案是检查并纠正$HOSTNAME
和/etc/hostname
。事实证明我的路由器有点困惑,并给了我一个错误的主机名域。重新启动这个后,我调用export HOSTNAME=the.correct.hostname
,我的兔子在不重启服务器操作系统的情况下运行。