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

Posted

技术标签:

【中文标题】第一次更改主机名后,rabbitmq-server 无法启动【英文标题】:rabbitmq-server fails to start after hostname has changed for first time 【发布时间】:2013-01-17 12:50:16 【问题描述】:

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

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

在对此错误进行一些研究后,我发现,更改我的主机名导致了来自 here 的此错误。我的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并解决了这个问题,将回答这个问题。

【问题讨论】:

在 centos/rhel 上,如果您通过 /etc/udev/rules/70-persistant-net.rules 重命名网络接口并重新启动 --> 这样做也会导致您收到错误消息来自rabbitmqctl status“无法连接到 epmd”。 --> 修复与the accepted answer by @RichardHFung for this question相同。 "systemctl restart rabbitmq-server.service" 解决了我遇到的同样问题。 如果在 Ubuntu 16.04 或 18.04 上,请勿通过存储库安装 RabbitMQ(它们已过时)。前往rabbitmq.com/install-debian.html 并通过从建议的存储库之一安装 Erlang 和 RabbitMQ 来省去一些麻烦。我前段时间从 erlang 解决方案安装了 Erlang,后来又通过它的 Ubuntu 存储库安装了 RabbitMQ,它最初工作时没有大惊小怪。最近一次升级后出现了问题,我花了 5 个小时试图修复它,但无济于事。我删除了这两个软件包并按照说明重新安装了 Bintray 的版本。固定。 【参考方案1】:

您可以通过删除与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。

【讨论】:

如何找到 Erlang Mnesia 数据库? 嗨@MatthewCanty:我遵循了第二种方法。 @MattCanty 在 rabbitmq 3.6.9-1,只是 rm -rf /var/lib/rabbitmq/mnesia/。 Erlang Mnesia 数据库在/var/lib/rabbitmq/mnesia/ 的文件路径下。【参考方案2】:

删除旧安装的 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 上写过这些步骤。

修订版

我将博客移至新网站。

【讨论】:

在 ubuntu (14.04.1 LTS) 上这对我不起作用。我需要 apt-get purge rabbitmq-server 然后运行 ​​apt-get install rabbitmq-server 以在主机名更改后再次运行。 RabbitMQ 无故中断,修复它的唯一方法是卸载并重新安装?这令人震惊... 在不丢失数据的情况下这样做? 我投了反对票,因为解决方案不是真正的解决方案。如果我再次更改主机名怎么办?再次删除rabbit,再次安装.... 如果您不想丢失数据,请查看@Kishor Pawar 的答案【参考方案3】:

在 Windows 上,我遇到的问题是 McAfee 防火墙造成的。确切的错误是:

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

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

【讨论】:

这对我有帮助。已经为此苦苦挣扎了 2 个小时,将其禁用并像魔术一样工作,谢谢!【参考方案4】:

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

【讨论】:

它工作,甚至没有卸载rabbitmq-server【参考方案5】:

感谢 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

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

【讨论】:

这是我遇到的确切情况,同样的解决方案有效 - 无需重新安装和修复 ip 并且有效 这应该被接受为正确的解决方案。在 xenial 上,我有 /etc/hosts 将 GloballyRoutableIP 与 hostname 名称(不是 fqdn)相关联,并发现将 NetworkTenIP 与该名称相关联修复了 epmd。杀死 epmd 并重新启动 rabbit 就足够了。【参考方案6】:

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

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

【讨论】:

这样做时要小心。您将丢失所有数据【参考方案7】:

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

sudo netstat -lnp

【讨论】:

【参考方案8】:

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

简短回答:

如果您想保留新的主机名更改,那么您可以在/etc/rabbitmq 中创建一个引用旧主机名的rabbitmq-env.conf 文件,一切都应该很好。以下是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

【讨论】:

这对我有帮助。我在 ArchLinux 上更新到最新版本的 rabbitmq (3.6.6-1) 并且无法启动它。看看/etc/rabbitmq/rabbitmq-env.conf 和'你瞧,NODENAME 完全错了。在升级期间,它已变为 rabbit@machine@machine,而不是 rabbit@machine。简单删除最后一个@machine 即可解决问题。 这是正确的答案恕我直言...@Chewtoy 它甚至在 Arch wiki 中:-D wiki.archlinux.org/index.php/Rabbitmq#Changed_hostname 太棒了!谢谢你。我更改了主机名,但不想丢失任何信息(用户名等)。 env.conf 文件解决了我的问题。 此文件在 Windows 上的什么位置?【参考方案9】:

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

127.0.0.1 <hostname>

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

【讨论】:

对我来说,这是有效的答案。但是我仍然很困惑为什么默认的127.0.0.1 localhost.localadmin localhost 行没有解析为适当的节点名。非常感谢!【参考方案10】:

我遇到了同样的问题,执行 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

【讨论】:

【参考方案11】:

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

希望对你有帮助。

【讨论】:

我有类似的问题,我更改主机名后,rabbitmq 也有问题。这对我有用。谢谢【参考方案12】:

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

【讨论】:

【参考方案13】:

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

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

脚本位于C:\Program Files\RabbitMQ Server\rabbitmq_server-&lt;version&gt;\sbin 文件夹。

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

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

【讨论】:

以上是关于第一次更改主机名后,rabbitmq-server 无法启动的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 更改计算机名后造成未找到或无法访问服务器解决方法

修改kvm宿主机主机名后

AD更改登陆账户名后,后XenDesktop DDC无法同步用户信息

Retrofit 2 从基本 url 中删除主机名后的字符

linux获取主机名后用gethostbyname 不能获取主机ip,该怎么处理

SQL Server在更改计算机名后的设置