操作环境

Proxmox VE: V8.1.3 多节点集群部署
homepve: 本次重装/迁移的节点,使用lvm作为启动磁盘
node-rest: 集群中的其他节点

预期效果

  • 保留homepve节点的所有宿主机设置与集群关系
  • 保留所有运行于homepve的虚拟机配置
  • homepve的启动引导磁盘由lvm变更为zfs mirror

操作步骤

0. 建议的前置步骤

  • node0中的所有虚拟机迁移至node-rest或停机备份至你的备份磁盘中
  • 备份以下目录:
    • /etc/pve
    • /etc/corosync
    • /root/ssh
    • /etc/network

1. 重新安装Proxmox VE

Warning

如果你没有完成步骤0
你必须保证homepve节点当前的启动磁盘不会在你的安装过程中格式化

安装前不要将homepve从集群中移除
使用官方镜像,直接重新安装homepve节点,
安装过程使用一组新的磁盘配置zfs mirror作为新的引导磁盘。

直到迁移结束前都建议保持节点离线,不要接入到集群网络中,
安装过程使用与之前相同的主机名,无其余特殊事项。

2. 完成配置迁移

Info

homepve启动至新安装的系统,以root身份登入终端
此步骤的全部流程都在该环境下完成

挂载旧系统的pve/root逻辑卷

此步骤用于获取旧系统中的配置信息,
如果你完成了步骤0,你也可以跳过此步骤并直接使用备份的配置

定位逻辑卷路径

如果没有特殊设置,一般会是/dev/pve/root

lvdisplay

创建临时文件夹并挂载旧系统的pve root卷

# 创建临时文件夹
mkdir tmpRoot
# 挂载旧系统的pve roor卷
mount /dev/pve/root tmpRoot
# 确认挂载情况
ls tmpRoot

迁移配置

停止全部pve服务

killall -9 corosync  
systemctl stop pve-cluster  
systemctl stop pvedaemon  
systemctl stop pvestatd  
systemctl stop pveproxy

迁移主机和集群配置

mv /etc/pve /etc/pve-OLD
mv /etc/corosync /etc/corosync-OLD
mv /root/.ssh /root/.ssh-OLD
mv /etc/network /etc/network-OLD
 
cp -a tmpRoot/etc/pve /etc
cp -a tmpRoot/etc/corosync /etc
cp -a tmpRoot/root/.ssh /root
cp -a tmpRoot/etc/network /etc

导入所有zfs存储池

如果你的旧节点没有使用zfs,无需进行此步骤

# 找到需要导入的存储池
zpool import
# 导入所有列出的存储池, 将pool_name替换为上一步出现的存储池名称
zpool import -f {pool_name}

重新激活ceph

如果你的旧节点没有使用ceph,无需进行此步骤

ceph-volume lvm activate --all

重启网络和pve服务

systemctl restart networking
systemctl restart pve-cluster  
systemctl restart pvedaemon  
systemctl restart pvestatd  
systemctl restart pveproxy

3. 验证效果

Info

虚拟机可能不会自动启动,建议确认homepve在线后,重启homepve节点

登入集群中任意节点webui

  • 确认旧节点已上线
  • 确认ceph状态正常

4. 后续步骤

迁移其他配置文件:

如果你通过宿主机配置了其他服务
你可以根据自己的需要从步骤2中挂载的旧系统卷中提取配置
例如nfs配置/etc/exports等,覆盖到新系统中
个人建议: 不要直接操作PVE宿主机不要直接在宿主机上直接运行业务负载

清理旧系统盘

旧系统盘仍然带有引导分区和完整的系统文件,
如果bios设置不当,可能你会重启至旧系统中
因此建议在迁移验证完成后,移除旧系统盘或完全格式化磁盘

参考资料