外观
跨集群迁移
在线迁移与离线迁移讲的是同一个集群内节点之间搬家。这篇讲一个不同的问题:两个互不隶属的 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 只是为了这次迁移临时建的,记得去目标集群删除它。
检查结果
- 目标集群的 Web UI 里能看到迁移过来的客户机,状态正常。
- 用测试数据验证磁盘内容、网络配置(网桥、VLAN)在新环境下仍然正确——跨集群意味着网络环境很可能不一样,不要假设网桥名字一致就等于网络配置一致。
- 确认源端是否需要手动清理:远程迁移不一定会自动删除源端的客户机,必要时用
qm unlock <vmid>解锁后手动处理源端残留。
常见问题
报错找不到证书指纹,或者指纹不匹配。 先不带 fingerprint 参数跑一次,从报错信息里拿到目标节点当前的实际指纹,确认是通过可信渠道核实过的(不是道听途说的一串字符),再补进正式命令。
API Token 报权限不足。 检查 Token 在目标集群上被授予的权限路径和范围,迁移涉及存储、网络和虚拟机管理的多项权限,按官方文档补全,不要一次性给全局管理员权限图省事。
想在 Web UI 里做跨集群迁移,找不到入口。 PVE 自身的 Web UI 目前没有直接的"迁到另一个集群"选项。如果你已经在用 Proxmox Datacenter Manager 同时接入了两个集群,可以在 PDM 的界面里选择跨 remote 的目标来做迁移,体验上更接近同集群内迁移。
迁移完成后源端的 VMID 想复用。 确认源端客户机已经按需清理或删除后,VMID 才能在源集群里被重新分配使用。