基于共享存储nfs的kvm动态迁移

来源:互联网 发布:淘宝csv导入怎么开发 编辑:程序博客网 时间:2024/06/15 23:48

基于共享存储的动态迁移

本文前面“V2V 迁移方式的分类”小节中介绍过,跟据虚拟机连接存储方式的不同,动态迁移分为基于共享存储的动态迁移和基于本地存储的存储块迁移。本小节实现了目前使用最广泛的基于共享存储的动态迁移。实现这种实时迁移的条件之一就是把虚拟机存储文件存放在公共的存储空间。因此需要设定一个共享存储空间,让源主机和目的主机都能够连接到共享存储空间上的虚拟媒体文件,包括虚拟磁盘、虚拟光盘和虚拟软盘。否则,即使迁移完成以后,也会因为无法连接虚拟设备,导致无法启动迁移后的虚拟机。

设置实验环境

动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网络,把虚拟机配置和内存运行状态从一台物理机迅速传送到另外一台物理机上,期间虚拟机一直保持运行状态。现有技术条件下,大多虚拟机软件如 VMware、Hyper-V、Xen 进行动态迁移都需要共享存储的支持。典型的共享存储包括 NFS 和 SMB/CIFS 协议的网络文件系统,或者通过 iSCSI 连接到 SAN 网络。选用哪一种网络文件系统,需要根据具体情况而定。本文的实验采用了 NFS 文件系统作为源主机和目的主机之间的共享存储。

Kvm动态迁移环境搭建

主机分为A和B

分别在主机上安装centos 7,其中包含kvm1.5.3 libvirt virt-manager 

二者处于一个网段中。其中nfs服务器我们采用A,搭建过程如下

安装相应组件yum -y install nfs-utils rpcbind


图 3. 共享存储的动态迁移实验配置图
图 3. 共享存储的动态迁移实验配置图
  1. 确保网络连接正确,源主机、目的主机和 NFS 服务器之间可以互相访问。
  2. 确保源主机和目的主机上的 VMM 运行正常。
  3. 设置 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:资料会先暂时存放在内存中,不会直接写入硬盘。 

不重起服务起效exportfs -r

重新启动 nfsserver 服务 # service nfsserver restart

Centos 6 

service rpcbind start

service nfs start

可能出现的问题

客户端测试时showmount -e nfs服务器

root@localhost~:clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

防火墙配置问题。通过修改/etc/iptables脚本目录,添加1112049nfsrpc服务使用的端口。或者直接关闭防火墙(不建议,除非你的虚拟机就在安全的局域网内或者虚拟机不作为网络服务器使用)。同时,也可以通过图形化界面去配置和编辑防火墙规则(iptables)。这里要注意一下,在CentOS 6.3当中,/etc目录下有多个iptables脚本文件,确保选择IPV4相关脚本(如果使用IPV6,请选择对应脚本修改)。

关闭防火墙 centos 7

systemctl firewalld stop

使用 virt-manager 进行动态迁移

virt-manager 是基于 libvirt 的图像化虚拟机管理软件,请注意不同的发行版上 virt-manager 的版本可能不同,图形界面和操作方法也可能不同。本文使用了 SLES11 SP1 发行版上的 virt-manager-0.8.4。

首先在源主机和目的主机上添加共享存储。这里以源主机为例,目的主机做相同的配置。

  • 添加 NFS 存储池到源主机和目的主机的 vit-manager 中。点击 Edit menu->Host Details->Storage tab。
    图 4. 存储池配置图
    图 4. 存储池配置图
  • 添加一个新的存储池。点击左下角的“+”号,弹出一个新的窗口。输入以下参数:
  • Name:存储池的名字。
  • Type:选择 netfs:Network Exported Directory。因为本文使用了 NFS 作为共享存储协议。
    图 5. 添加共享存储池
    图 5. 添加共享存储池
  • 点击“Forward”后,输入以下参数:
  • Target Path:共享存储在本地的映射目录。本文中这个目录在源主机和目的主机上必须一致。
  • Format:选择存储类型。这里必须是 nfs。
  • Host Name:输入共享存储服务器,也就是 NFS 服务器的 IP 地址或 hostname。
  • Source Path:NFS 服务器上输出的共享目录。
    图 6. 存储池设置
    图 6. 存储池设置
  • 点击”Finish”后,共享存储添加成功。此时在物理机上查看 Linux 系统的文件系统列表,可以看到共享存储映射的目录。

源主机上创建基于共享存储的 KVM 虚拟机。

  • 选择共享存储池,点击”New Volume”创建新的存储卷。
  • 输入存储卷参数。本例为虚拟机创建了大小为 10G,格式为 qcow2 的存储卷。
    图 7. 添加存储卷
    图 7. 添加存储卷
  • 在这个共享存储卷上创建虚拟机。本文创建了一个基于 Window 2008 R2 系统的虚拟机。创建虚拟机的具体步骤见本文前面“创建 KVM 虚拟机“小节。

注意:在创建好的img上建虚拟机时,有时会出现could not open disk image……Permission denied

解决步骤:

将共享目录权限设为chmod 777

编辑/etc/libvirt/qemu.conf - options "user" and "group", thus qemu is able to access 也就是把相应两行注释去掉

 

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

# Some examples of valid values are:

#

# user = "qemu" # A user named "qemu"

# user = "+0" # Super user (uid=0)

# user = "100" # A user named "100" or a user with uid=100

#

user = "root"

 

# The group for QEMU processes run by the system instance. It can be

# specified in a similar way to user.

group = "root"

 

# Whether libvirt should dynamically change file ownership

# to match the configured user/group above. Defaults to 1.

# Set to 0 to disable file ownership changes.

dynamic_ownership = 0

然后重起libvirtd    service libvirtd restart

 

如果还是出现同样问题,那么有可能是selinux策略默认不允许kvm使用nfs文件,(http://bbs.chinaunix.net/thread-1919880-1-1.html)所以需要

1)# setenforce 0

2)编辑 /etc/selinux/config 把 SELINUX=enforcing 改为 SELINUX=disabled

3)确认 /mnt/116.254.191.19.s 是否存在。请给出ls输出

4)重试安装


连接远程物理主机上的 VMM。这里以源主机为例,目的主机做相同的配置。

  • 在源主机上打开 virt-manager 应用程序,连接 localhost 本机虚拟机列表。点击 File->Add Connection,弹出添加连接窗口,输入以下各项:
  • Hypervisor:选择 QEMU。
  • Connection:选择连接方式 。本文选择 SSH 连接。
  • Hostname:输入将要连接的主机名或 IP 地址,这里填写目的主机名 victory4。
    图 8. 添加远程 VMM 连接
    图 8. 添加远程 VMM 连接
  • 点击 Connect,输入 SSH 连接的密码后,将显示源主机和目的主机上的虚拟机列表。
    图 9. 管理远程 VMM
    图 9. 管理远程 VMM

从源主机动态迁移 KVM 虚拟机到目的主机。

  • 在源主机上启动虚拟机 Windwos 2008 R2。
  • 在虚拟机中,开启实时网络服务(用来验证迁移过程中服务的可用性)。
  • 开启远程连接服务 remote access,在其他主机上远程连接此虚拟机。
  • 开启网络实时服务。例如打开浏览器并且播放一个实时网络视频。
  • 准备动态迁移,确保所有的虚拟存储设备此时是共享的,包括 ISO 和 CDROM。
  • 在源主机的 virt-manager 窗口中,右键点击等待迁移的虚拟机,选择“Migrate ”。
    • New host:选择目的主机的 hostname。
    • Address:填入目的主机的 IP 地址。
    • Port and Bandwith:指定连接目的主机的端口和传输带宽,本文中没有设定,使用默认设置。
    图 10. 虚拟机迁移设置
    图 10. 虚拟机迁移设置
  • 点击“Migrate”和“Yes”开始动态迁移虚拟机。
    图 11. 虚拟机迁移进度
    图 11. 虚拟机迁移进度
  • 动态迁移的时间与网络带宽、物理主机的性能和虚拟机的配置相关。本实验中的网络连接基于 100Mbps 的以太网,整个迁移过程大约耗时 150 秒。使用 RDC(Remote Desktop Connection)远程连接虚拟机在迁移过程中没有中断;虚拟机中播放的实时网络视频基本流畅,停顿的时间很短,只有 1 秒左右。如果采用 1000Mbps 的以太网或者光纤网络,迁移时间将会大大减少,而虚拟机服务停顿的时间几乎可以忽略不计。
  • 迁移完成后,目的主机的 VMM 中自动创建了一个同名的 Windows 2008 R2 虚拟机,并且继续提供远程连接服务和播放在线视频。源主机上的虚拟机变为暂停状态,不再提供服务。至此,动态迁移胜利完成。

0 0