第一次更改主机名后,rabbitmq-server无法启动

时间:2013-02-02 06:30:03

标签: ubuntu rabbitmq django-celery

我在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并解决了这个问题,将回答这个问题。

13 个答案:

答案 0 :(得分:54)

删除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. 查找运行兔子的erlang进程:ps ax | grep rabbit

  7. 终止列出的流程

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

  9. 我在my blog上写过这些步骤。

    <强> REVISION

    我将博客移至新网站。

答案 1 :(得分:39)

感谢Richard H Fung。

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

  

但我没有必要重新安装rabbitmq

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

#/etc/hosts  
127.0.0.1       localhost  
192.168.1.115   HOSTNAME

所以我刚刚在我的192.168.1.200文件中将 IP地址更改为/etc/hosts,它运行正常。

答案 2 :(得分:20)

理查德的答案很好,但你可能会丢失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 - Could not connect: [Errno -2] Name or service not known

答案 3 :(得分: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软件包的更多信息,可以参考此link

答案 4 :(得分:5)

在Windows上,我遇到的问题是由McAfee防火墙引起的。主机“”:地址(无法连接到主机/端口)

的确切错误是epmd错误

我在禁用防火墙后立即开始工作

答案 5 :(得分:5)

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

此操作可解决此问题。我相信转储中的某个地方存储了一个记录,其中包含节点主机名和ips的对应关系。如果某些主机意外地发生了变化,这个事实会引起矛盾。

答案 6 :(得分:3)

我的解决方案是检查并更正 $HOSTNAME /etc/hostname。事实证明我的路由器有点困惑,并给了我一个错误的主机名域。重新启动这个之后,我调用了export HOSTNAME=the.correct.hostname并且我的兔子在没有重新启动服务器操作系统的情况下运行。

答案 7 :(得分:3)

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

127.0.0.1 <hostname>

其中<hostname>是我的机器的主机名(由hostname命令给出)。添加该行后,RabbitMQ成功启动。我之前没有安装任何RabbitMQ。

答案 8 :(得分:0)

我遇到了同样的问题并且做了理查德·H·冯提供的步骤并没有帮助我。我还必须卸载这些软件包: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

答案 9 :(得分:0)

为解决此问题,我用新的主机名更改了/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

希望有帮助。

答案 10 :(得分:0)

唯一适用于我的解决方案:从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

安装erlang:

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

答案 11 :(得分:0)

在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

答案 12 :(得分:-2)

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

sudo netstat -lnp