目录
基本概念
一、迁移原理
1. 静态迁移(冷迁移)
- 定义:虚拟机关机后,完整拷贝磁盘文件与配置文件至目标主机。
- 技术流程:
- 关闭源虚拟机
- 传输磁盘文件(如通过
scp或共享存储) - 在目标主机注册虚拟机(
virsh define)并启动
- 底层机制:依赖文件系统级复制,无实时状态同步需求
2. 动态迁移(热迁移)
- 定义:虚拟机运行时迁移,业务无感知
- 核心流程:
- 预拷贝阶段:全量传输内存页至目标主机
- 迭代同步:循环复制脏页(内存变更部分)
- 切换阶段:暂停源虚拟机,同步最终差异后恢复运行
- 关键技术:
- 共享存储:避免磁盘文件传输(如NFS、Ceph)
- CPU兼容性:需相同指令集架构(Intel VT-x/AMD-V)
二、关键特性
| 特性 | 说明 |
|---|---|
| 零停机时间 | 热迁移实现业务连续性(停机时间<1秒) |
| 跨平台兼容性 | 支持P2V(物理机转虚拟机)、V2V(虚拟机间迁移) |
| 资源优化 | 结合KSM内存合并、CPU绑定提升迁移效率 |
| 安全隔离 | 迁移通道支持TLS加密,防止数据泄露 |
三、实际意义
1. 运维价值
- 负载均衡:动态调整虚拟机分布,避免主机过载
- 硬件维护:无需停机即可迁移虚拟机进行物理设备升级
2. 业务连续性
- 故障恢复:主机故障时快速迁移至备用节点
- 跨云迁移:实现私有云与公有云(如阿里云、AWS)间资源调度
3. 成本优化
- 能效管理:通过整合低负载虚拟机降低数据中心能耗
- 资源利用率:超分技术(如1:8 vCPU分配)提升硬件使用率
四、典型应用场景
- 金融行业:核心交易系统热迁移保障高可用性
- 云计算平台:OpenStack等云管平台依赖KVM迁移实现弹性伸缩
- 开发测试:快速克隆环境至不同物理节点
技术定位:KVM迁移通过硬件辅助虚拟化与开源生态结合,成为现代混合云架构的核心能力
一、迁移原理
1. 静态迁移(冷迁移)
- 定义:虚拟机关机后,完整拷贝磁盘文件与配置文件至目标主机。
- 技术流程:
- 关闭源虚拟机
- 传输磁盘文件(如通过
scp或共享存储) - 在目标主机注册虚拟机(
virsh define)并启动
- 底层机制:依赖文件系统级复制,无实时状态同步需求
2. 动态迁移(热迁移)
- 定义:虚拟机运行时迁移,业务无感知
- 核心流程:
- 预拷贝阶段:全量传输内存页至目标主机
- 迭代同步:循环复制脏页(内存变更部分)
- 切换阶段:暂停源虚拟机,同步最终差异后恢复运行
- 关键技术:
- 共享存储:避免磁盘文件传输(如NFS、Ceph)
- CPU兼容性:需相同指令集架构(Intel VT-x/AMD-V)
二、关键特性
| 特性 | 说明 |
|---|---|
| 零停机时间 | 热迁移实现业务连续性(停机时间<1秒) |
| 跨平台兼容性 | 支持P2V(物理机转虚拟机)、V2V(虚拟机间迁移) |
| 资源优化 | 结合KSM内存合并、CPU绑定提升迁移效率 |
| 安全隔离 | 迁移通道支持TLS加密,防止数据泄露 |
三、实际意义
1. 运维价值
- 负载均衡:动态调整虚拟机分布,避免主机过载
- 硬件维护:无需停机即可迁移虚拟机进行物理设备升级
2. 业务连续性
- 故障恢复:主机故障时快速迁移至备用节点
- 跨云迁移:实现私有云与公有云(如阿里云、AWS)间资源调度
3. 成本优化
- 能效管理:通过整合低负载虚拟机降低数据中心能耗
- 资源利用率:超分技术(如1:8 vCPU分配)提升硬件使用率
四、典型应用场景
- 金融行业:核心交易系统热迁移保障高可用性
- 云计算平台:OpenStack等云管平台依赖KVM迁移实现弹性伸缩
- 开发测试:快速克隆环境至不同物理节点
技术定位:KVM迁移通过硬件辅助虚拟化与开源生态结合,成为现代混合云架构的核心能力。
五、大致步骤
一、静态迁移(冷迁移)
1. 核心原理
- 定义:在虚拟机关机状态下,通过复制磁盘文件与配置文件(XML)至目标主机实现迁移
- 特点:
- 需中断业务(停机时间取决于文件传输速度)
- 支持本地存储与非共享存储环境
2. 实现步骤
- 关闭虚拟机
virsh shutdown vm01 # 安全关闭虚拟机:ml-citation{ref="9" data="citationList"} virsh domstate vm01 # 确认状态为"shut off":ml-citation{ref="9" data="citationList"} - 导出配置与磁盘文件
virsh dumpxml vm01 > vm01.xml # 导出XML配置文件:ml-citation{ref="2,9" data="citationList"} scp vm01.xml root@target_host:/etc/libvirt/qemu/ # 传输配置:ml-citation{ref="9" data="citationList"} scp /var/lib/libvirt/images/vm01.qcow2 root@target_host:/path/to/store/ # 传输磁盘文件:ml-citation{ref="2" data="citationList"} - 目标主机注册启动
virsh define /etc/libvirt/qemu/vm01.xml # 注册虚拟机:ml-citation{ref="2" data="citationList"} virsh start vm01 # 启动虚拟机:ml-citation{ref="9" data="citationList"}
二、动态迁移(热迁移)
1. 核心原理
- 定义:虚拟机运行时迁移,通过预拷贝内存页和实时同步脏页实现业务无感知切换
- 特点:
- 依赖共享存储(如NFS、Ceph)避免磁盘传输
- 要求源/目标主机CPU架构一致且网络稳定
2. 实现步骤
- 配置共享存储
# 源主机配置NFS共享(示例) mkdir /shared_storage echo "/shared_storage 192.168.1.0/24(rw,sync)" >> /etc/exports:ml-citation{ref="8" data="citationList"} systemctl restart nfs-server - 启动动态迁移
virsh migrate --live vm01 qemu+ssh://target_host/system # 基于SSH的在线迁移:ml-citation{ref="6" data="citationList"} - 迁移过程监控
- 预拷贝阶段:全量传输内存至目标主机
- 迭代同步:循环传输被修改的脏页
- 最终切换:暂停源虚拟机,同步剩余差异后恢复运行(停机时间<1秒)
三、关键对比
| 特性 | 静态迁移 | 动态迁移 |
|---|---|---|
| 停机时间 | 分钟级 | 毫秒级 |
| 存储要求 | 支持本地存储 | 必须共享存储 |
| 适用场景 | 维护升级、跨云迁移 | 负载均衡、故障转移 |
| 复杂度 | 低(仅文件复制) | 高(需网络/CPU兼容) |
四、注意事项
- 静态迁移:需保证目标主机目录结构与源主机一致
- 动态迁移:内存密集型应用可能导致迁移失败(脏页生成速率>传输速率)
- 通用要求:迁移前需备份XML配置,避免网络中断
部署步骤
静态
1. 源主机操作:准备迁移文件
# 关闭虚拟机(确保数据一致性)
virsh shutdown vm_centos7 # 发送ACPI信号安全关闭虚拟机
virsh list --all # 确认虚拟机状态为"shut off"
# 导出虚拟机XML配置(包含硬件定义)
virsh dumpxml vm_centos7 > /migration/vm_centos7.xml # 将配置保存到迁移目录
# 复制磁盘文件(使用rsync支持断点续传)
rsync -avzP /var/lib/libvirt/images/vm_centos7.qcow2 root@target_host:/migration/
- 关键参数:
rsync -avzP:归档模式+压缩+显示进度+断点续传dumpxml:导出包含CPU/内存/网络等完整定义的XML文件
2. 目标主机操作:注册虚拟机
# 检查存储目录权限
ls -ld /var/lib/libvirt/images/
# 确认目录属组为libvirt-qemu # 移动磁盘文件到libvirt默认路径
mv /migration/vm_centos7.qcow2 /var/lib/libvirt/images/
# 修改XML中的磁盘路径(若目标存储路径不同)
sed -i 's|/var/lib/libvirt/images/|/new/path/|g' /migration/vm_centos7.xml
# 注册并启动虚拟机
virsh define /migration/vm_centos7.xml # 将配置导入libvirt
virsh start vm_centos7 # 启动虚拟机
virsh console vm_centos7 # 连接控制台验证
3. 完整迁移脚本示例
#!/bin/bash
# Static Migration Script for KVM (Source Host)
VM_NAME="vm_centos7"
TARGET_IP="192.168.1.100"
MIG_DIR="/migration"
# Step 1 - Stop VM
virsh shutdown $VM_NAME
sleep 10 # Wait for shutdown completion
# Step 2 - Export config
virsh dumpxml $VM_NAME > $MIG_DIR/${VM_NAME}.xml
# Step 3 - Transfer files
scp $MIG_DIR/${VM_NAME}.xml root@$TARGET_IP:$MIG_DIR/
rsync -avzP /var/lib/libvirt/images/${VM_NAME}.qcow2 root@$TARGET_IP:$MIG_DIR/
echo "Migration files transferred. Please run on target host:"
echo "1. virsh define ${MIG_DIR}/${VM_NAME}.xml"
echo "2. virsh start ${VM_NAME}"
关键注意事项
-
磁盘格式兼容性:
- 确保目标主机支持qcow2格式(默认支持)
- 若使用RAW格式需检查预分配空间
-
网络配置调整:
<!-- 修改XML中的网卡MAC地址避免冲突 --> <interface type='network'> <mac address='52:54:00:12:34:56'/> <!-- 需唯一 --> </interface> -
权限问题处理:
chown qemu:qemu /var/lib/libvirt/images/vm_centos7.qcow2 # 修正磁盘文件属主 restorecon -Rv /var/lib/libvirt/images/ # SELinux上下文修复
典型耗时场景:
- 100GB磁盘文件通过1Gbps网络传输约需15分钟
- 建议在业务低峰期执行冷迁移
动态
一、基于共享存储的动态迁移命令
1. 基础迁移命令
virsh migrate --live vm_web01 qemu+ssh://192.168.1.100/system --unsafe --verbose
-
virsh migrate:触发迁移操作的主命令 -
--live:指定热迁移模式(保持虚拟机运行) -
vm_web01:待迁移的虚拟机名称 -
qemu+ssh://192.168.1.100/system:目标主机连接协议(SSH加密传输) -
--unsafe:绕过部分安全检查(需确保CPU兼容性) -
--verbose:显示详细迁移日志
2. 高级参数扩展
virsh migrate --live vm_db01 \
--copy-storage-all \
--persistent \
--timeout 300 \
qemu+tls://10.0.0.2/system
-
--copy-storage-all:同步非共享存储的磁盘文件(全量拷贝) -
--persistent:迁移后目标虚拟机保持持久化状态 -
--timeout 300:设置迁移超时时间为300秒 -
qemu+tls://:使用TLS加密通道(需提前配置证书)
二、非共享存储动态迁移命令
1. 磁盘文件预同步
# 在目标主机创建空白磁盘(需与源磁盘同大小)
qemu-img create -f qcow2 /data/vm_db01.qcow2 100G
-
qemu-img create:创建目标磁盘文件 -
-f qcow2:指定磁盘格式为qcow -
100G:容量需匹配源磁盘
2. 启动增量迁移
virsh migrate --live vm_db01 \
--copy-storage-inc \
--migrateuri tcp://192.168.1.100:49152 \
qemu+ssh://192.168.1.100/system
-
--copy-storage-inc:增量同步磁盘变更(非全量拷贝) -
--migrateuri:指定自定义端口传输数据(避免防火墙拦截)
三、关键参数对比
| 参数 | 作用 | 适用场景 |
|---|---|---|
--live | 保持虚拟机运行状态 | 所有热迁移场景 |
--copy-storage-all | 全量拷贝磁盘文件 | 非共享存储首次迁移 |
--copy-storage-inc | 增量同步磁盘差异 | 非共享存储后续迁移 |
--persistent | 迁移后虚拟机自动持久化 | 生产环境长期运行需求 |
--timeout | 防止网络延迟导致迁移卡死 | 高延迟网络环境 |
四、注意事项
- CPU兼容性:源/目标主机需相同CPU厂商(Intel/AMD)及指令集
- 内存限制:内存脏页率超过1GB/s时可能迁移失败
- 网络带宽:建议至少10Gbps网络避免传输瓶颈
- 服务端口:需开放49152-49216端口用于数据传输
典型错误处理:若迁移失败,可通过
virsh domjobinfo vm_web01查看迁移状态
1165

被折叠的 条评论
为什么被折叠?



