跳转到内容

在线迁移与离线迁移 ​

组好集群之后,最直接的收益就是能把客户机从一个节点挪到另一个节点——做节点维护、升级、或者负载不均衡时都会用到。这篇讲清楚什么情况下能在线(不停机)迁移,什么情况下只能离线(先关机再搬)。

为什么需要它 ​

常见场景:

  • 要重启某个节点打补丁,先把上面的虚拟机迁走。
  • 某个节点负载太高,把几台客户机挪到空闲的节点。
  • 硬件要下线维修或退役,配合安全移除节点先清空节点。

开始之前 ​

迁移能不能在线,取决于三件事:

条件说明
磁盘位置磁盘在共享存储(Ceph、NFS、iSCSI 等所有节点都能访问的存储)上,才能真正无缝在线迁移;磁盘在本地存储上,PVE 会在迁移过程中把整块磁盘通过网络搬过去,期间仍然可以不停机,但耗时取决于磁盘大小和网络带宽
有无存储复制如果目标节点上已经有这台客户机的 ZFS 存储复制副本,迁移只需要同步增量,快得多
CPU 类型虚拟机 CPU 类型选了 host(见创建第一个虚拟机的 CPU 一节),只能迁移到指令集兼容的节点;选通用型号(如 x86-64-v2-AES)才能自由迁移到任意节点

容器(LXC)和虚拟机(KVM)不完全一样

虚拟机可以做真正的在线迁移(内存状态一起搬过去,几乎无感知中断)。容器的在线迁移能力和实现方式以你的版本文档为准——不确定的话按"会有短暂中断"来规划维护窗口,不要假设它和虚拟机的在线迁移完全等价。

本地磁盘的在线迁移会占用网络带宽,可能拖慢集群

把一块几十上百 GB 的本地磁盘在线迁移到另一个节点,数据要整块通过网络传输。如果没有为迁移单独规划网络(默认经管理网络或按 datacenter.cfg 里的 migration 设置走指定网段),会和其他流量(客户机对外访问、其他备份/迁移任务)抢带宽。生产环境建议给迁移单独配一个网段,规划方法和 corosync 链路类似,见集群进阶。

操作步骤 ​

Web UI ​

右键点选中的虚拟机/容器 → Migrate:

  1. 选择目标节点。
  2. 如果磁盘在本地存储,需要选择目标节点上对应的存储(做存储映射)。
  3. 勾选 Online(可选项是否出现取决于当前状态和存储条件)发起在线迁移;不勾选则会先关机再搬,即离线迁移。
  4. 观察任务日志里的进度,迁移完成后客户机会出现在目标节点下。

命令行 ​

sh
# 在线迁移虚拟机 100 到 node2
qm migrate 100 node2 --online

# 容器迁移,具体是否支持在线以及命令参数以你的版本 man pct 为准
pct migrate 200 node2

<vmid>/<ctid> 换成实际编号,在 Web UI 左侧树客户机名称前能看到。

检查结果 ​

  1. 目标节点上出现该客户机,原节点上消失。
  2. 在目标节点执行 qm status <vmid>(或 pct status <ctid>),确认状态为 running。
  3. 客户机内部网络、磁盘数据保持不变——用测试客户机先跑一遍,确认应用没有异常。
  4. 查看 Web UI 的任务日志,确认迁移任务是 OK 结束,没有报错。

常见问题 ​

迁移选项里没有 Online,只能离线迁移。 通常是磁盘在本地存储且目标节点没有该客户机的存储复制副本,或者客户机当前配置不满足在线迁移条件(例如挂了直通设备)。挂了 PCI/USB 直通的客户机一般不能在线迁移。

迁移失败,报 CPU 不兼容。 虚拟机 CPU 类型选了 host,目标节点的物理 CPU 指令集和源节点不完全一致。改成通用 CPU 类型需要重启虚拟机才能生效,不能迁移中途切换。

迁移很慢。 检查是走了哪个网络(管理网还是专用迁移网),以及磁盘是不是在本地存储上做整盘复制。给目标节点配置存储复制可以把后续迁移的数据量降到只有增量。

迁移完成后原节点上还留着旧配置或磁盘残留。 正常迁移会自动清理;如果任务中途失败,检查 Web UI 任务日志的报错,必要时手动核对源节点和目标节点上是否都残留了同一 VMID 的文件。

参考资料 ​

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