PVE 修改集群节点主机名以及其他机器加入集群(没有虚拟机的情况下)

由于前期安装的时随便起的 Proxmox VE 节点主机名,现在想要修改为更有意义的名字便于多集群管理。

没有虚拟机的情况下修改主机名不影响虚拟机数据

PVE 节点主机名修改记录

**最终结果:✅ 节点名由 pve 变更为 106-56-70-89-pve-master1,所有服务正常。 **过程分两次改名:先 pve → pve-master1(含拆集群),再 pve-master1 → 106-56-70-89-pve-master1。

1. 环境信息

项目 值
IP 106.56.70.89
登录 root(SSH 端口 22)
原主机名 pve
最终主机名 106-56-70-89-pve-master1(FQDN…-master1.local)
PVE 版本 pve-manager/9.2.2(kernel 7.0.2-6-pve)
虚拟机/容器 无
原集群状态 单节点集群jiqun(corosync knet)→ 已拆为独立节点
存储 local、local-lvm、data1(全局配置,不受节点名影响)

2. 关键背景(为什么不能只改那 3 个文件)

网上常见的”改 /etc/hosts、/etc/hostname、/etc/postfix/main.cf“只适用于普通 Linux 主机,对 PVE 不完整:

  1. PVE 的节点名固化在集群配置里。本机已配置为单节点集群,集群节点名不允许直接修改,必须先拆集群转独立。
  2. 主机名合法性:只能含字母、数字、连字符 -,不能含 .(会被当域名分隔符)和 _(非法字符)。因此最初设想的 106.56.70.89-pve_master1 不合法,最终采用连字符写法 106-56-70-89-pve-master1。

正确流程:拆集群转独立 → 改主机名 → 重启 pve-cluster → 重新生成节点证书/目录 → 迁移配置 → 清理旧目录 → 重启服务。


3. 第一次改名:pve → pve-master1

3.1 备份(可回滚)

1
2
3
4
5
6
mkdir -p /root/pve-rename-backup
cp -a /etc/hostname /etc/hosts /etc/postfix/main.cf /root/pve-rename-backup/
cp -a /etc/pve/corosync.conf /root/pve-rename-backup/ 2>/dev/null
cp -a /etc/corosync/corosync.conf /root/pve-rename-backup/
cp -a /etc/pve/.members /etc/pve/storage.cfg /root/pve-rename-backup/ 2>/dev/null
cp -a /etc/pve/nodes/pve /root/pve-rename-backup/nodes-pve

3.2 拆集群,转独立(standalone)节点

1
2
3
4
5
6
7
8
9
systemctl stop pve-cluster
systemctl stop corosync
nohup pmxcfs -l >/var/log/pmxcfs-local.log 2>&1 &   # 本地模式挂载 /etc/pve
sleep 3
rm -f /etc/pve/corosync.conf                          # 删除 pmxcfs 里的集群配置
rm -f /etc/corosync/corosync.conf /etc/corosync/authkey
killall pmxcfs                                        # 停掉手动启动的 pmxcfs
sleep 2
systemctl start pve-cluster                           # 无 corosync.conf 时以独立模式启动

验证:pvecm status 应报错 Corosync config does not exist(即非集群状态)。

3.3 修改主机名

1
2
3
hostnamectl set-hostname pve-master1
sed -i "s/^106\.56\.70\.89 .*/106.56.70.89 pve-master1.local pve-master1/" /etc/hosts
sed -i "s/^myhostname=.*/myhostname = pve-master1.local/" /etc/postfix/main.cf

3.4 重启 pve-cluster,生成新节点目录

1
2
3
systemctl restart pve-cluster
# 等待 10~15 秒(pmxcfs daemonize + 重放 WAL 较慢,勿过早查询)
pvecm updatecerts --force    # 重新生成节点证书 + 创建 /etc/pve/nodes/pve-master1/

3.5 迁移节点描述并清理旧节点

1
2
echo "#236-test-pve" > /etc/pve/nodes/pve-master1/config   # 迁移节点描述
rm -rf /etc/pve/nodes/pve                                  # 删除旧节点目录

3.6 重启 PVE 服务栈

1
systemctl restart pvedaemon pveproxy pvestatd postfix

4. 第二次改名:pve-master1 → 106-56-70-89-pve-master1

此时集群已拆、节点为独立模式,改名流程大幅简化(无需再拆集群)。

4.1 备份当前状态

1
2
3
mkdir -p /root/pve-rename-backup-stage2
cp -a /etc/hostname /etc/hosts /etc/postfix/main.cf /root/pve-rename-backup-stage2/
cp -a /etc/pve/nodes/pve-master1 /root/pve-rename-backup-stage2/nodes-pve-master1

4.2 修改主机名

1
2
3
hostnamectl set-hostname 106-56-70-89-pve-master1
sed -i "s/^106\.56\.70\.89 .*/106.56.70.89 106-56-70-89-pve-master1.local 106-56-70-89-pve-master1/" /etc/hosts
sed -i "s/^myhostname.*/myhostname = 106-56-70-89-pve-master1.local/" /etc/postfix/main.cf

**⚠️ **sed 匹配 myhostname 时用 ^myhostname.*(不限定等号前后空格),否则遇到 myhostname = xxx(等号带空格,第一次 sed 造成的)会匹配不到。

4.3 重启 pve-cluster,生成新节点目录

1
2
3
systemctl restart pve-cluster
sleep 15                      # 等待 pmxcfs 完全启动
pvecm updatecerts --force     # 生成 /etc/pve/nodes/106-56-70-89-pve-master1/

4.4 迁移节点描述并清理旧节点

1
2
echo "#236-test-pve" > /etc/pve/nodes/106-56-70-89-pve-master1/config
rm -rf /etc/pve/nodes/pve-master1

4.5 重启 PVE 服务栈

1
systemctl restart pvedaemon pveproxy pvestatd postfix

5. 验证结果

1
2
3
4
5
6
hostname                      # -> 106-56-70-89-pve-master1
hostname -f                   # -> 106-56-70-89-pve-master1.local
ls /etc/pve/nodes/            # -> 只剩 106-56-70-89-pve-master1
systemctl is-active pve-cluster pvedaemon pveproxy pvestatd postfix   # 全部 active
cat /etc/pve/storage.cfg      # local / local-lvm / data1 完好
curl -sk https://localhost:8006/    # Web 登录页正常返回 HTML

6. 遇到的问题与排查

问题 原因 解决
pmxcfs反复显示 inactive、/etc/pve未挂载 pmxcfs 启动(daemonize + 重放 WAL)需数秒,查询时机过早 等 10~15 秒后再查,用systemctl status确认
unable to acquire pmxcfs lock - trying again 多次手动前台运行pmxcfs产生孤儿 daemon 进程持有锁,干扰 systemd pkill -9 pmxcfs清干净孤儿进程,改用systemctl start pve-cluster
$(systemctl is-active ...)返回inactive假象 SSH 远程命令中的$(...)命令替换被本地 shell 提前展开 远程命令中避免使用$(...)/ shell 变量,用纯命令
sed改 postfix 不生效 第一次 sed 后myhostname = xxx带空格,第二次^myhostname=(无空格)匹配不到 用^myhostname.*匹配整行

7. 回滚方法(如需要)

1
2
3
4
5
6
7
8
9
# 恢复主机名与 hosts
hostnamectl set-hostname pve
cp -a /root/pve-rename-backup/hosts /etc/hosts
cp -a /root/pve-rename-backup/hostname /etc/hostname
cp -a /root/pve-rename-backup/main.cf /etc/postfix/main.cf

# 恢复集群配置(如需回到单节点集群)
cp -a /root/pve-rename-backup/corosync.conf /etc/corosync/corosync.conf
systemctl restart pve-cluster

8. 注意事项

  • 主机名规范:PVE 节点名只能含字母、数字、连字符 -,不能用 .(分隔 FQDN)和 _;以数字开头合法,但建议避免与 IP 混淆。
  • 集群节点改名:PVE 规定节点加入集群后不能直接改节点名。单节点集群需先拆为独立节点再改;多节点集群改名需先从集群删除节点。
  • 本机现为独立节点(非集群)。若将来要加节点做 HA 高可用集群,需要重新 pvecm create 创建集群。
  • 敏感信息:本文档不含 SSH 密码,操作时请使用实际凭据。