<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hostname on 认真的雪</title><link>https://blog.wjhe.top/tags/hostname/</link><description>Recent content in Hostname on 认真的雪</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Wed, 01 Jul 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.wjhe.top/tags/hostname/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux 安装 RabbitMQ 后启动失败：hostname 里有点号导致节点名解析异常</title><link>https://blog.wjhe.top/linux-rabbitmq-hostname-contains-dot-start-failed/</link><pubDate>Wed, 01 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.wjhe.top/linux-rabbitmq-hostname-contains-dot-start-failed/</guid><description>&lt;h2 id="背景"&gt;背景
&lt;/h2&gt;&lt;p&gt;在 Linux 上安装 RabbitMQ 后，执行启动命令失败：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start rabbitmq-server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看 systemd 日志：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;journalctl -u rabbitmq-server -xe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;日志里大概能看到 hostname 解析失败。因为当时没有保存原始日志，只记得现象类似：主机名是 &lt;code&gt;12.2.3.4&lt;/code&gt; 时，RabbitMQ 报找不到 &lt;code&gt;12&lt;/code&gt; 的 IP 地址。&lt;/p&gt;
&lt;p&gt;后面发现问题不只出现在“主机名刚好是 IP 地址”的情况。只要 hostname 里面包含点号，例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;12.2.3.4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1.2.3.4-node1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;都可能触发同类问题。&lt;/p&gt;
&lt;h2 id="原因"&gt;原因
&lt;/h2&gt;&lt;p&gt;RabbitMQ 是基于 Erlang 的。RabbitMQ 节点名默认类似这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rabbit@hostname
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果没有显式配置 &lt;code&gt;RABBITMQ_NODENAME&lt;/code&gt;，RabbitMQ 启动时会使用当前系统 hostname 生成节点名。官方文档里也明确说了：RabbitMQ 节点名由前缀和 hostname 组成，例如 &lt;code&gt;rabbit@node1.messaging.svc.local&lt;/code&gt;，节点之间和命令行工具都会通过这个节点名通信，所以节点名里的 hostname 必须能被解析。&lt;/p&gt;
&lt;p&gt;这里还有一个容易踩坑的点：RabbitMQ 默认使用短节点名（short node name）。短节点名通常只适合 &lt;code&gt;node1&lt;/code&gt; 这种不带点号的主机名。如果 hostname 写成 &lt;code&gt;12.2.3.4&lt;/code&gt; 或 &lt;code&gt;1.2.3.4-node1&lt;/code&gt;，Erlang/RabbitMQ 可能会把点号前面的部分当成短主机名处理，也就是把它理解成 &lt;code&gt;12&lt;/code&gt; 或 &lt;code&gt;1&lt;/code&gt;，然后去解析这个名字，最终启动失败。&lt;/p&gt;
&lt;p&gt;所以这类问题的核心不是“hostname 不能是 IP”，而是：&lt;strong&gt;RabbitMQ 默认短节点名不适合带点号的 hostname，尤其不适合把 IP 或类似 IP 的字符串直接拿来当 hostname。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="排查"&gt;排查
&lt;/h2&gt;&lt;p&gt;先看当前 hostname：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hostname
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hostnamectl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果输出类似下面这样，就要怀疑这个问题：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;12.2.3.4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1.2.3.4-node1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再看 RabbitMQ 的启动日志：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;journalctl -u rabbitmq-server -xe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以查看更完整的 RabbitMQ 日志目录，具体路径可能和发行版、安装方式有关：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ls -lh /var/log/rabbitmq/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果日志里出现 hostname 解析失败、节点名解析失败、找不到某个短名字的 IP 地址，就基本能确认方向。&lt;/p&gt;
&lt;h2 id="解决办法"&gt;解决办法
&lt;/h2&gt;&lt;p&gt;最简单的做法是把系统 hostname 改成一个普通主机名，不要使用 IP，也不要包含点号：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hostnamectl set-hostname rabbitmq-node1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;检查是否生效：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hostname
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hostnamectl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果 &lt;code&gt;/etc/hosts&lt;/code&gt; 里有旧 hostname，也一起改掉。例如单机环境可以这样写：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;127.0.0.1 localhost localhost.localdomain
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;127.0.0.1 rabbitmq-node1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后重启 RabbitMQ：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl restart rabbitmq-server
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl status rabbitmq-server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果之前启动失败已经留下了旧节点名相关的数据目录，可能还需要根据实际情况清理或迁移 RabbitMQ 数据目录。这个操作会影响已有数据，生产环境不要直接删目录，先确认数据是否可以丢弃。&lt;/p&gt;
&lt;h2 id="其他方案"&gt;其他方案
&lt;/h2&gt;&lt;p&gt;如果你确实需要使用完整域名，可以考虑配置 RabbitMQ 使用 long node name：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;RABBITMQ_USE_LONGNAME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但这要求节点名里的完整域名能被 DNS 或 &lt;code&gt;/etc/hosts&lt;/code&gt; 正确解析。对单机部署来说，直接把 hostname 改成 &lt;code&gt;rabbitmq-node1&lt;/code&gt; 这种短名字更简单，也更不容易出错。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;RabbitMQ 启动依赖 Erlang 节点名。默认情况下，节点名会使用系统 hostname，并且使用短节点名。&lt;/p&gt;
&lt;p&gt;因此安装 RabbitMQ 的机器，hostname 最好使用这种格式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rabbitmq-node1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mq-node1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;node1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不要使用这种格式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;12.2.3.4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1.2.3.4-node1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这次问题最后通过 &lt;code&gt;hostnamectl set-hostname rabbitmq-node1&lt;/code&gt; 解决。&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rabbitmq.com/docs/clustering#node-names" target="_blank" rel="noopener"
 &gt;https://www.rabbitmq.com/docs/clustering#node-names&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rabbitmq.com/docs/clustering#hostname-resolution-requirement" target="_blank" rel="noopener"
 &gt;https://www.rabbitmq.com/docs/clustering#hostname-resolution-requirement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rabbitmq.com/docs/networking#dns-resolution-by-nodes" target="_blank" rel="noopener"
 &gt;https://www.rabbitmq.com/docs/networking#dns-resolution-by-nodes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>