跳转到内容

跨集群迁移 ​

在线迁移与离线迁移讲的是同一个集群内节点之间搬家。这篇讲一个不同的问题:两个互不隶属的 PVE(各自是独立主机或独立集群),要不要把它们凑成一个集群才能迁移客户机?不一定——PVE 提供了跨集群/跨主机的远程迁移能力,不需要两边先合并成一个集群。

为什么需要它,以及为什么要谨慎 ​

常见场景:两个团队/两个机房各自维护自己的 PVE 集群,想把某台虚拟机从一边挪到另一边,但不想把两个集群合并成一个(合并集群的复杂度和风险远高于迁移一台客户机)。

这项能力目前仍标注为实验性质

远程迁移(qm remote-migrate / pct remote-migrate)从 PVE 7.3 开始提供,官方在论坛上明确表示这项功能相对文档较少、仍属于实验性质。生产环境的关键客户机如果要做跨集群搬迁,更成熟、更少意外的做法通常是:备份后在目标集群恢复,而不是直接用远程迁移。远程迁移更适合先在测试环境里充分验证过流程的场景。

原理 ​

远程迁移不依赖 PVE 集群之间的信任关系(不需要 corosync、不需要共享 /etc/pve),而是通过 API 通信:源节点向目标节点的 API(默认 TCP 8006)发起一个认证过的迁移请求,把配置、磁盘,以及(在线迁移时)内存状态直接传过去。

开始之前 ​

条件说明
网络源节点能以 HTTPS 访问目标节点的 API 端口(默认 TCP 8006)
API Token需要在目标集群创建一个具备相应迁移权限的 API Token(数据中心 → 权限 → API Tokens),按最小权限原则授权,不要图省事给超级用户权限
证书指纹需要目标节点的 TLS 证书指纹用于校验;拿不到时,可以先不带指纹执行一次命令,报错信息里通常会给出实际指纹供你核对后再正式使用
目标存储与网桥确认目标集群上对应的存储名称和网桥名称,迁移命令需要显式指定映射关系

操作步骤 ​

sh
# 在源节点执行,把 VMID 100 迁移到目标节点,目标 VMID 仍为 100
qm remote-migrate 100 100 \
  'host=<目标节点IP>,apitoken=PVEAPIToken=<用户>@pam!<token名>=<token值>,fingerprint=<证书指纹>' \
  --target-bridge <目标网桥> \
  --target-storage <目标存储> \
  --online
  • 去掉 --online 即为离线迁移:客户机需要先关机。
  • 容器对应使用 pct remote-migrate,具体参数以你版本的 man pct 为准。

参数里包含 API Token 明文,注意保护

上面命令行里的 apitoken=... 会包含 Token 的明文值,出现在 shell 历史记录和进程列表里。不要把带着真实 Token 的完整命令贴到工单、聊天记录或本文档这类会被留存的地方;操作完之后,如果这个 Token 只是为了这次迁移临时建的,记得去目标集群删除它。

检查结果 ​

  1. 目标集群的 Web UI 里能看到迁移过来的客户机,状态正常。
  2. 用测试数据验证磁盘内容、网络配置(网桥、VLAN)在新环境下仍然正确——跨集群意味着网络环境很可能不一样,不要假设网桥名字一致就等于网络配置一致。
  3. 确认源端是否需要手动清理:远程迁移不一定会自动删除源端的客户机,必要时用 qm unlock <vmid> 解锁后手动处理源端残留。

常见问题 ​

报错找不到证书指纹,或者指纹不匹配。 先不带 fingerprint 参数跑一次,从报错信息里拿到目标节点当前的实际指纹,确认是通过可信渠道核实过的(不是道听途说的一串字符),再补进正式命令。

API Token 报权限不足。 检查 Token 在目标集群上被授予的权限路径和范围,迁移涉及存储、网络和虚拟机管理的多项权限,按官方文档补全,不要一次性给全局管理员权限图省事。

想在 Web UI 里做跨集群迁移,找不到入口。 PVE 自身的 Web UI 目前没有直接的"迁到另一个集群"选项。如果你已经在用 Proxmox Datacenter Manager 同时接入了两个集群,可以在 PDM 的界面里选择跨 remote 的目标来做迁移,体验上更接近同集群内迁移。

迁移完成后源端的 VMID 想复用。 确认源端客户机已经按需清理或删除后,VMID 才能在源集群里被重新分配使用。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。