Proxmox VE 5.4不停机修改主机名

今天修理一台坏掉的Proxmox VE。打开网页管理面板一看,本来是单节点工作的机子上显示了两个节点,但是corosync并没有在运行。更为诡异的是,其中一个节点显示了本机的存储池,另一个节点显示了本机的虚拟机,各种状态API则是有的好有的坏。检查后发现,这台机子的主机名被人改过,但是PVE的一些设置没有同步,导致API出现了各种问题。这里就体现出了PVE的缺点:有些地方过度设计(例如用DNS查询来寻找所有节点),有些地方欠缺考虑(例如主机名不和系统同步),有些地方文档几乎没有。

经过研究,单节点的PVE修改主机名还算简单,只需要将几个不同地方的配置文件同步上即可。至于集群的PVE主机,我的建议是能少折腾尽量少折腾,毕竟身体最重要。

Linux标准配置

首先要修改/etc/hostname,这是所有Linux系统的主机名设置位置。

然后,PVE要求在本机解析自己的主机名能解析到除了127.0.0.1::1以外的本机的网卡IP上。因此我们需要修改/etc/hosts,删掉原来主机名的记录,添加一行新的记录:

192.0.2.2    new-hostname.example.org new-hostname

Proxmox Cluster file system

PVE的配置文件存放于一个FUSE挂载的文件系统上,在多节点集群中,这个文件系统的内容会自动在各个节点间同步。更改了主机名以后,我们需要让PVE能够找到对应的配置。

千万记得在操作之前备份整个nodes文件夹——这个文件系统是在同步的(即使你的PVE是单节点),移动文件过程中如果出现访问冲突,文件就有可能丢失,需要手工再覆盖一次。

首先干掉文件同步服务,强制让本地数据作为权威:

systemctl stop pve-cluster
pmxcfs --local

然后看一下战况如何:

ls /etc/pve/nodes/

运气好的话,这里只有一个和老主机名同名的文件夹。那么就只需要简单地复制(不能移动)一下文件,再删掉源文件:

# make a backup!
cp -r /etc/pve/nodes/old-hostname /tmp/old-hostname

# we use cp here since pmcxfs doesn't allow moving non-empty folder
cp -r /etc/pve/nodes/old-hostname /etc/pve/nodes/new-hostname
rm -r /etc/pve/nodes/old-hostname

运气不好的话,下面已经有两个分别以老主机名和新主机名命名的文件夹了,那么你就得手工merge一下文件了。我这边删掉新主机名为名的文件夹,用老主机名为名的文件夹直接覆盖了,好像也没有出什么事。

确定nodes下只有一个和新主机名同名的文件夹以后,我们需要更新一下这个文件系统里面的一些软链接。这些软链接是用户不可写的,在文件同步服务启动时自动配置。所以我们直接重启文件同步进程:

killall pmxcfs
systemctl restart pve-cluster

RRDcache

systemctl stop rrdcached
cd /var/lib/rrdcached/db
cd pve2-node
rm new-hostname
mv old-hostname new-hostname
cd ../pve2-storage
rm -rf new-hostname
mv old-hostname new-hostname
systemctl start rrdcached

重新启动服务的时候会有一些日志重放的错误,因为文件名变了,可以忽略。

API服务器

API和一些反向代理依赖主机名来找对应的主机(即使你的PVE是单节点),所以我们要重启它们,让它们重新载入正确的配置。

systemctl restart pvedaemon
systemctl restart pvestatd

似乎一些健康状态检查的daemon不会立即更新数据,可能需要等待五分钟左右。

善后工作

  • pool配置可能会丢失
  • 用户权限可能会丢失

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据