Step3—主机名解析同步
# Step3—主机名解析同步
Step2 已经先用 IP 做通免密,Step3 才开始整理主机名。这里要避免两个坑:一是在同一台机器上连续执行三条 hostnamectl,把所有节点都写成同一个名字;二是直接覆盖 /etc/hosts,把系统原有 loopback、IPv6 或云主机条目弄丢。
本文示例统一使用 FQDN:
| IP | FQDN |
|---|---|
192.168.3.101 | hadoop1.test.com |
192.168.3.102 | hadoop2.test.com |
192.168.3.103 | hadoop3.test.com |
这里不再用短主机名作为安装入口。后续如果要接 Kerberos、LDAP、SPNEGO 或证书,Ambari 注册主机、Principal、证书 SAN 和服务回调地址都更容易保持一致。
# 分节点设置 hostname
在 192.168.3.101 上执行:
sudo hostnamectl set-hostname hadoop1.test.com
hostnamectl --static
2
在 192.168.3.102 上执行:
sudo hostnamectl set-hostname hadoop2.test.com
hostnamectl --static
2
在 192.168.3.103 上执行:
sudo hostnamectl set-hostname hadoop3.test.com
hostnamectl --static
2

注意
主机名不要使用下划线,也不要频繁变更。Hadoop、Kerberos、数据库授权、组件配置里都会引用主机名,后面再改会很麻烦。
# 追加 Ambari Plus hosts 段
每台机器都执行下面这段。它会先备份 /etc/hosts,再删除旧的 Ambari Plus 集群段,最后追加新的集群段;系统原有条目会保留。
sudo cp /etc/hosts /etc/hosts.bak.$(date +%F-%H%M%S)
sudo sed -i '/# Ambari Plus hosts BEGIN/,/# Ambari Plus hosts END/d' /etc/hosts
sudo tee -a /etc/hosts >/dev/null <<'EOF'
# Ambari Plus hosts BEGIN
192.168.3.101 hadoop1.test.com
192.168.3.102 hadoop2.test.com
192.168.3.103 hadoop3.test.com
# Ambari Plus hosts END
EOF
2
3
4
5
6
7
8
9
10

# 验证主机名解析
每台机器都执行:
getent hosts hadoop1.test.com
getent hosts hadoop2.test.com
getent hosts hadoop3.test.com
2
3
再看 FQDN:
hostname
hostname -f
2
hostname -f 应该分别返回 hadoop1.test.com、hadoop2.test.com、hadoop3.test.com。如果仍然只返回短名,先不要继续注册主机,回头检查 hostnamectl 和 /etc/hosts。
# 用主机名复测 SSH 免密
Step2 用 IP 做通后,现在每台节点再用主机名测一遍:
ssh -o BatchMode=yes hadoop1.test.com hostname -f
ssh -o BatchMode=yes hadoop2.test.com hostname -f
ssh -o BatchMode=yes hadoop3.test.com hostname -f
2
3
如果 IP 登录成功、主机名登录失败,优先检查 /etc/hosts 集群段是否三台一致。
# DNS 与 /etc/hosts 的关系
生产环境最好以受管 DNS、CMDB 或配置管理系统为准。如果保留 /etc/hosts,也要纳入统一配置管理,避免 DNS 和 hosts 长期漂移。
推荐原则:
| 场景 | 建议 |
|---|---|
| 实验环境 | 直接维护 /etc/hosts 集群段 |
| 小规模生产 | DNS 为准,必要时用配置管理下发 hosts |
| 大规模生产 | DNS/CMDB 为准,安装前逐台校验解析 |
# 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
getent hosts hadoop2.test.com 无输出 | 集群段没写入或写错 | 检查 Ambari Plus hosts 段 |
| ping 到旧 IP | hosts、DNS 或缓存存在旧记录 | 先看 getent hosts 输出 |
hostname -f 不是 FQDN | hostname 或 hosts 没统一 | 重新执行本步骤,确认三台都返回 *.test.com |
| Ambari 页面显示旧主机名 | 安装前改过 hostname | 清理旧注册信息后重新注册 |
完成这一步后,集群节点之间就可以稳定使用主机名通信。下一步做 Chrony 时间同步。