virsh migrate 是什么
virsh migrate 把运行中的虚机从一台宿主迁到另一台,内存状态持续复制,服务中断通常在秒级。共享存储场景只传内存,无共享存储时用 --copy-storage-all 全量复制磁盘,耗时随数据量增长。--persistent 让目标端保留定义,--undefinesource 在迁移成功后注销源端定义。
基本信息
| 基本形态 | virsh migrate --live vm1 qemu+ssh://root@node2/system |
|---|---|
| 定义处理 | --persistent 目标保留定义;--undefinesource 迁后注销源 |
| 无共享存储 | --copy-storage-all(全量存储复制) |
| 观察进度 | --verbose 输出进度;virsh domjobinfo 查看详细信息 |
| 传输通道 | qemu+ssh、qemu+tls、qemu+tcp,需提前配好认证 |
典型使用场景
- 宿主维护下线前把虚机迁到其他节点,避免业务停机
- 无共享存储的搬迁场景,用存储复制一次性搬走虚机
- 手工均衡节点负载,把热点宿主上的虚机迁走
- 容灾演练中验证迁移流程与目标端可用性
带存储复制的迁移
带存储复制的迁移
virsh migrate --live --persistent --verbose --copy-storage-all \
vm1 qemu+ssh://root@node2/system
virsh domjobinfo vm1 # 迁移中查看数据剩余量与带宽
virsh domblklist vm1 # 迁移后核对磁盘映射是否完整
# 目标端确认:virsh list --all 与 virsh dominfo vm1
# 事前准备:SSH 免密、known_hosts、目标端同一 libvirt 存储路径迁移方式对照
| 方式 | 传输内容 | 适用场景 |
|---|---|---|
| 共享存储热迁移 | 只传内存与设备状态 | 两节点共用同一存储,中断时间最短 |
| --copy-storage-all | 全量复制磁盘 + 内存状态 | 无共享存储,磁盘数据量不大 |
| 增量磁盘复制 | 仅复制目标端已有磁盘的差异块 | 目标端已有相同基线磁盘,节省搬迁时间 |
| 关机迁移 | 完整磁盘与定义文件 | 可停机业务,不受网络带宽限制 |
迁移失败常见三类原因:目标端 CPU 型号或特性不兼容、迁移网络带宽不足、磁盘路径在目标端不存在;排查先看源端日志与 libvirt 报错原文。
大内存虚机的热迁移会在收尾阶段反复重传脏页,内存写入密集的业务可能长时间无法收敛,必要时用停机时间目标或迁前限流业务写入。
迁移前后的存储路径、网络名称与 CPU 特性都要一致:目标端宿主的 CPU 型号较旧或缺特性时迁移会被拒绝,可先比对两侧 CPU 标志再安排窗口。