第一次更改主机名后,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>
其中<hostname>
是我的机器的主机名(由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-<version>\sbin
文件夹。
或者可能只是改变HKEY_LOCAL_MACHINE\SOFTWARE\Ericsson\Erlang\ErlSrv\1.1\RabbitMQ\@SName
的值就足够了。
线索:https://github.com/rabbitmq/rabbitmq-server/issues/620
【讨论】:
以上是关于第一次更改主机名后,rabbitmq-server 无法启动的主要内容,如果未能解决你的问题,请参考以下文章
SQL server 更改计算机名后造成未找到或无法访问服务器解决方法
AD更改登陆账户名后,后XenDesktop DDC无法同步用户信息