KVM跨物理机静态迁移详解
KVM(Kernel-based Virtual Machine)作为Linux内核的虚拟化模块,广泛应用于服务器虚拟化场景,在实际运维中,常需将虚拟机从一台物理机迁移到另一台物理机,根据业务需求和服务中断容忍度,迁移方式分为静态迁移(离线迁移)和动态迁移(在线迁移),本文将详细解析KVM跨物理机的静态迁移技术,包括原理、适用场景、操作步骤及注意事项。
静态迁移的原理与特点
静态迁移(Offline Migration),也称为常规迁移或离线迁移,是指在虚拟机关机或暂停状态下,将其从源物理机迁移到目标物理机的过程,其核心逻辑如下:
步骤 | 说明 | |
---|---|---|
关闭/暂停虚拟机 | 通过virsh shutdown 或virsh suspend 命令停止虚拟机运行。 |
静态迁移必须中断虚拟机服务,适用于对可用性要求不高的场景。 |
迁移存储文件 | 拷贝虚拟机磁盘镜像文件(如.qcow2 )和配置文件(如.xml )到目标主机。 |
若使用共享存储(如NFS),仅需迁移配置文件;若使用本地存储,需同时迁移镜像文件。 |
重建虚拟机状态 | 在目标主机加载配置文件并启动虚拟机,恢复服务。 | 若迁移前执行了快照或内存转储,需额外处理以保存迁移前状态。 |
特点:
- 优点:操作简单,无需复杂配置,适用于计划内维护或资源调整。
- 缺点:迁移过程中虚拟机不可用,存在明确的停机时间。
静态迁移的适用场景
- 非生产环境:测试、开发环境的资源调整。
- 计划内维护:如硬件升级、主机检修前的虚拟机转移。
- 本地存储场景:虚拟机磁盘未配置共享存储(如SAN、NFS),需手动迁移镜像文件。
- 跨平台迁移:将虚拟机从x86_64架构迁移到ARM架构(需调整配置文件)。
静态迁移的操作步骤
以下以基于本地存储的静态迁移为例,详细说明操作流程:
源主机操作
-
步骤1:确认虚拟机状态
virsh list --all
确保目标虚拟机(如
vm-test
)处于shut off
或paused
状态。 -
步骤2:导出配置文件
virsh dumpxml vm-test > /root/vm-test.xml
该命令将虚拟机的XML配置文件导出到指定路径。
-
步骤3:拷贝镜像文件和配置文件
# 拷贝镜像文件(假设路径为/var/lib/libvirt/images/vm-test.qcow2) scp /var/lib/libvirt/images/vm-test.qcow2 user@target_host:/var/lib/libvirt/images/ # 拷贝配置文件到目标主机的对应目录 scp /root/vm-test.xml user@target_host:/etc/libvirt/qemu/
若使用共享存储(如NFS),可跳过镜像文件拷贝,直接复制配置文件。
目标主机操作
-
步骤1:定义虚拟机
virsh define /etc/libvirt/qemu/vm-test.xml
该命令根据XML文件在目标主机注册虚拟机。
-
步骤2:检查存储路径一致性
若源主机与目标主机的存储路径不一致(如源主机镜像路径为/home/vm-test
,目标主机为/kvm/vm-test
),需创建软链接:ln -s /kvm/vm-test /home/vm-test
否则虚拟机可能因找不到镜像文件而启动失败。
-
步骤3:启动虚拟机
virsh start vm-test
启动后可通过
virsh list --all
确认虚拟机状态。
常见问题与解决方案
问题 | 原因 | 解决方案 |
---|---|---|
虚拟机启动失败,提示“无法找到磁盘” | 镜像文件路径不一致或权限不足 | 检查目标主机的镜像路径,确保与配置文件中的<source> 标签一致,必要时创建软链接或修改配置文件。 |
跨平台迁移后报错“CPU型号不匹配” | 源主机与目标主机的CPU架构不同 | 编辑目标主机的XML配置文件,删除或修改<cpu> 节点,使其与目标主机兼容。 |
SELinux阻止虚拟机访问NFS存储 | SELinux策略限制NFS挂载点的访问 | 在目标主机执行setsebool -P virt_use_nfs 1 ,允许KVM使用NFS存储。 |
静态迁移与动态迁移的对比
特性 | 静态迁移 | 动态迁移 |
---|---|---|
服务中断 | 有明确停机时间 | 无感知中断(在线迁移) |
存储要求 | 支持本地存储和共享存储 | 需共享存储或块迁移技术 |
复杂度 | 简单易行 | 需配置内存状态迁移和网络同步 |
适用场景 | 非生产环境、计划内维护 | 生产环境、高可用集群 |
FAQs
Q1:静态迁移是否需要共享存储?
A1:不需要,静态迁移支持本地存储和共享存储两种场景:
- 本地存储:需手动拷贝虚拟机镜像文件和配置文件。
- 共享存储(如NFS、iSCSI):仅需迁移配置文件,镜像文件通过共享存储访问。
Q2:如何保存虚拟机迁移前的状态?
A2:若需保留迁移前的状态,可采取以下方法:
- 快照:在源主机对虚拟机创建快照(
virsh snapshot-create-as
),迁移后在目标主机恢复快照。 - 内存转储:暂停虚拟机(
virsh suspend
),将内存状态保存为镜像文件,拷贝到目标主机后恢复执行
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/49869.html