本文前面“V2V 迁移方式的分类”小节中介绍过,跟据虚拟机连接存储方式的不同,动态迁移分为基于共享存储的动态迁移和基于本地存储的存储块迁移。本小节实现了目前使用最广泛的基于共享存储的动态迁移。实现这种实时迁移的条件之一就是把虚拟机存储文件存放在公共的存储空间。因此需要设定一个共享存储空间,让源主机和目的主机都能够连接到共享存储空间上的虚拟媒体文件,包括虚拟磁盘、虚拟光盘和虚拟软盘。否则,即使迁移完成以后,也会因为无法连接虚拟设备,导致无法启动迁移后的虚拟机。
设置实验环境动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网络,把虚拟机配置和内存运行状态从一台物理机迅速传送到另外一台物理机上,期间虚拟机一直保持运行状态。现有技术条件下,大多虚拟机软件如 VMware、Hyper-V、Xen 进行动态迁移都需要共享存储的支持。典型的共享存储包括 NFS 和 SMB/CIFS 协议的网络文件系统,或者通过 iSCSI 连接到 SAN 网络。选用哪一种网络文件系统,需要根据具体情况而定。本文的实验采用了 NFS 文件系统作为源主机和目的主机之间的共享存储。
图 3. 共享存储的动态迁移实验配置图确保网络连接正确,源主机、目的主机和 NFS 服务器之间可以互相访问。
确保源主机和目的主机上的 VMM 运行正常。
设置 NFS 服务器的共享目录。本文的 NFS 服务器也安装了 SLES11 SP1 操作系统。
清单 3. 配置 NFS 服务修改 /etc/exports 文件,添加 /home/image *(rw,sync,no_root_squash) rw:可读写的权限; ro:只读的权限; no_root_squash:登入到 NFS 主机的用户如果是 ROOT 用户,他就拥有 ROOT 权限,此参数很不安全,建议不要使用。 sync:资料同步写入存储器中。 async:资料会先暂时存放在内存中,不会直接写入硬盘。 重新启动 nfsserver 服务 # service nfsserver restart
使用 virt-manager 进行动态迁移virt-manager 是基于 libvirt 的图像化虚拟机管理软件,请注意不同的发行版上 virt-manager 的版本可能不同,图形界面和操作方法也可能不同。本文使用了 SLES11 SP1 发行版上的 virt-manager-0.8.4。
首先在源主机和目的主机上添加共享存储。这里以源主机为例,目的主机做相同的配置。
添加 NFS 存储池到源主机和目的主机的 vit-manager 中。点击 Edit menu->Host Details->Storage tab。 图 4. 存储池配置图
添加一个新的存储池。点击左下角的“+”号,弹出一个新的窗口。输入以下参数:
Name:存储池的名字。
Type:选择 netfs:Network Exported Directory。因为本文使用了 NFS 作为共享存储协议。 图 5. 添加共享存储池
点击“Forward”后,输入以下参数:
Target Path:共享存储在本地的映射目录。本文中这个目录在源主机和目的主机上必须一致。
Format:选择存储类型。这里必须是 nfs。
Host Name:输入共享存储服务器,也就是 NFS 服务器的 IP 地址或 hostname。
Source Path:NFS 服务器上输出的共享目录。 图 6. 存储池设置
点击”Finish”后,共享存储添加成功。此时在物理机上查看 Linux 系统的文件系统列表,可以看到共享存储映射的目录。
源主机上创建基于共享存储的 KVM 虚拟机。
选择共享存储池,点击”New Volume”创建新的存储卷。
输入存储卷参数。本例为虚拟机创建了大小为 10G,格式为 qcow2 的存储卷。 图 7. 添加存储卷
在这个共享存储卷上创建虚拟机。本文创建了一个基于 Window 2008 R2 系统的虚拟机。创建虚拟机的具体步骤见本文前面“创建 KVM 虚拟机“小节。
连接远程物理主机上的 VMM。这里以源主机为例,目的主机做相同的配置。
在源主机上打开 virt-manager 应用程序,连接 localhost 本机虚拟机列表。点击 File->Add Connection,弹出添加连接窗口,输入以下各项:
Hypervisor:选择 QEMU。
Connection:选择连接方式 。本文选择 SSH 连接。