kvm虚拟机迁移技术研究Word文档格式.docx
《kvm虚拟机迁移技术研究Word文档格式.docx》由会员分享,可在线阅读,更多相关《kvm虚拟机迁移技术研究Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
尽管商业的虚拟软件功能比较强大,但是开源虚拟机如Linux内核虚拟机KVM和XEN发展迅速,迁移技术日趋完善。
虚拟机迁移有三种方式,分别是P2V、V2V和V2P,不同的方式又存在许多不同的解决方案。
而本文是在v2v这种方式的基础上完成KVM虚拟机的迁移。
2.KVM虚拟机迁移原理
虚拟机迁移过程中数据的传输(磁盘镜像和内存数据)
通常有两种常用的数据传输方式:
--基于hypervisor的传输机制,即通过host之间连接来进行数据传输
--基于libvirtd的传输机制,即两个libvirtd进程之间的数据传输
(1)基于hypervisor的数据传输
这种传输方式具有最低的overload,因为传输的是裸数据,不支持数据的加密。
另外,因为依赖于hypervisor的网络,所以需要对hypervisornetworks进行一些特定的配置,比如
打开某些端口。
(2)基于libvirtd的数据传输
这种传输方式支持加密,是通过libvirt内建的RPC协议来进行数据的传输的,但是缺点是除了传输裸数据外,还需要传输一些额外的数据,这对镜像尺寸很大的虚拟机来说是个大问题。
优点是由于不依赖与hypervisornetwork,所以不需要hypervisor对network做过多的配置,仅仅打开某个指定的port即可。
3.虚拟机迁移过程中的控制流
(1)带有管理端的直接迁移
这种迁移方式是由一个管理客户端发起,管理客户端完全控制整个迁移流程,所以它必须能够且有权限访问源主机和目的主机上libvirtd的权限,因为外加一个管理客户端,所以不需要源libvirtd和目的libvirtd之间进行直接的交流,只需要按照管理客户端的指示来办事就好了。
(2)带有管理端的点对点的迁移
这种迁移方式下,管理客户端至于源libvirtd交互,然后源libvirtd完全控制整个迁移过程。
优点是,即使管理客户端挂掉了,迁移还是能正常完成的。
二、虚拟机静态迁移
1.虚拟机静态迁移简介
静态迁移也叫做常规迁移、离线迁移(OfflineMigration)。
就是在虚拟机关机或暂停的情况下从一台物理机迁移到另一台物理机。
因为虚拟机的文件系统建立在虚拟机镜像上面,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理主机上;
如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。
这种方式的迁移过程需要显式的停止虚拟机的运行。
从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。
这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。
2.静态迁移
(1)确定虚拟机关闭状态
(2)准备迁移vm2虚拟机,查看该虚拟机配置的磁盘文件
(3)导入虚拟机配置文件
(4)拷贝配置文件到目标虚拟主机上。
scp是Linux下的远程拷贝命令,首先需要安装ssh服务:
#apt-getinstallapt-getinstallopenssh-server
启动服务
拷贝配置文件
在目标机器(node2)查看文件是否拷贝成功
在拷贝的时候可能出现以下问题:
原因:
scp是基于ssh的拷贝服务,ssh在没有密钥登录的情况下,禁用了密码登录,故出现如上错误。
解决办法:
修改目标机器配置文件:
vi/etc/ssh/sshd_config
将其中的PermitRootLoginno修改为yes
PubkeyAuthenticationyes修改为no
AuthorizedKeysFile.ssh/authorized_keys前面加上#屏蔽掉,
PasswordAuthenticationno修改为yes
保存配置文件,重启ssh服务即可。
(5)拷贝虚拟磁盘文件
(6)拷贝镜像文件
3.目标虚拟主机(node2)启动客户虚拟机
上面已经将虚拟机磁盘文件与配置文件都已经复制到目标虚拟主机上了,下面开始配置、启动虚拟机。
(1)查看目标虚拟主机环境
(2)定义并注册虚拟机vm2
(3)开启虚拟机vm2
可能会出现上面的错误,解决办法如下:
重新启动
(4)使用vnc连接虚拟机
看到这个界面,说明虚拟机已经迁移成功。
三、虚拟机动态迁移
动态迁移就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。
该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。
与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。
迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。
对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。
动态迁移适用于对虚拟机服务可用性要求很高的场合。
本文采用的是虚拟主机到虚拟主机的动态迁移,以便了解虚拟机动态迁移过程。
相比KVM虚拟机静态迁移中需要拷贝虚拟机虚拟磁盘文件,KVM虚拟机动态迁移无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构的虚拟机磁盘文件,本文这部分内容通过NFS来实现,当然也可以采用GFS2集群文件系统来实现,本文的动态迁移是基于共享存储动态迁移。
KVM动态迁移目前有两种,一种是基于共享存储的动态迁移,一种是基于基于数据块的动态迁移,需要qemu-kvm-0.12.2以上版本支持。
2.虚拟化平台架构
虚拟机动态迁移架构图
实验环境:
一台物理主机、三台虚拟主机
3.配置实实验环境
在本地主机上安装ubuntu14.04虚拟机,配置所需要的实验环境,并使用克隆技术,创建另外两台虚拟主机。
虚拟主机node1
桥接IP地址:
192.168.26.151
虚拟主机node2
桥接IP地址:
192.168.26.152
虚拟主机node3(需要NFS配置,详细配置会在文章末尾介绍)
192.168.26.153
4.node1节点挂载NFS
(1)查看NFS服务器(node3)分享目录
(2)挂载NFS目录
#mount-tnfs192.168.26.153:
//home/demo/Documents/var/lib/libvirt/images/-orw
5.node2节点挂载NFS
6.虚拟机迁移
(1)查看节点1状态(传输前)
(2)传输文件(需保证node1和node2有相同的文件结构)
#virshmigrate--live--verbosevm3qemu+ssh:
//192.168.26.152/systemtcp:
//192.168.26.152--unsafe
传输后node1节点状态
发现虚拟客户机vm3已经关闭。
(3)查看node2节点
node3节点一直在ping要迁移的虚拟机,基本没有断线情况,说明动态迁移虚拟机对客户机的影响不大。
(4)使用vnc打开迁移的客户机
可以看到登录界面,说明虚拟客户机迁移成功。
四、NFS文件共享技术
1.NFS简介
NFS是NetworkFileSystem的缩写,即网络文件系统。
一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。
功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
NFS的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
NFS在文件传送或信息传送过程中依赖于RPC协议。
RPC,远程过程调用(RemoteProcedureCall)是能使客户端执行其他系统中程序的一种机制。
NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。
而这些传输协议用到这个RPC功能的。
可以说NFS本身就是使用RPC的一个程序。
或者说NFS也是一个RPCSERVER。
所以只要用到NFS的地方都要启动RPC服务,不论是NFSSERVER或者NFSCLIENT。
这样SERVER和CLIENT才能通过RPC来实现PROGRAMPORT的对应。
可以这么理解RPC和NFS的关系:
NFS是一个文件系统,而RPC是负责负责信息的传输。
NFS分服务器和客户机,当使用远端文件时只要用mount命令就可把远端NFS服务器上的文件系统挂载在本地文件系统之下,操作远程文件与操作本地文件没有不同。
NFS服务器所共享文件或目录记录在/etc/exports文件中。
嵌入式Linux开发中,会经常使用NFS,目标系统通常作为NFS客户机使用,Linux主机作为NFS服务器。
在目标系统上通过NFS,将服务器的NFS共享目录挂载到本地,可以直接运行服务器上的文件。
在调试系统驱动模块以及应用程序,NFS都是十分必要的,并且Linux还支持NFS根文件系统,能直接从远程NFSroot启动系统,这对嵌入式Linux根文件系统裁剪和集成也是十分有必要的。
2.NFS服务器搭建
(1)搭建环境
服务器主机系统:
ubuntu14.04桌面版
(2)安装必要软件
#apt-getinstallnfs-kernel-servernfs-commonportmap
(3)配置挂载目录和权限
打开/etc/exports文件,在文件末尾添加下面一行代码:
/home/demo/Documents:
与nfs服务客户端共享的目录。
*:
允许所有的网段访问,也可以使用具体的IP。
rw:
挂接此目录的客户端对该共享目录具有读写权限。
sync:
资料同步写入内存和硬盘。
no_root_squash:
root用户具有对根目录的完全管理访问权限。
no_subtree_check:
不检查父目录的权限。
设置共享目录权限
#chmod777/home/demo/Documents-R
(4)重启服务
重启rpcbind服务
#/etc/init.d/rpcbindrestart
重启NFS服务
#/etc/init.d/nfs-kernel-serverrestart
(5)测试
本地测试
可以看到挂在的文件。
取消挂在
#umount/mnt
至此,NFS服务器搭建完毕。
3.NFS客户端搭建
Ubuntu默认并不安装nfs客户端,首先需要安装:
#apt-getinstallnfs-common
之后就可以挂载文件了。