linux静态迁移,kvm 静态迁移、动态迁移(基于nfs和后端镜像)

参考

迁移:迁移包含系统整体的迁移和某个工作负载的迁移,按照迁移的特性可以分为以下几类:

静态迁移(冷迁移):指迁移过程中明显有一段时间,客户机的服务不可用,它还可以分为两种,一种是完全关闭客户机后,将硬盘镜像复制到另外的宿主机再启动起来,这种不会保存客户机的工作负载状态; 还有一种并不完全关闭客户机而是暂停客户机,而后用快照之类的方式,把当前的状态做成快照,复制快照到新的宿主机上启动。

动态迁移(热迁移):是指保证客户机上应用服务正常运行的同时,完成迁移,用户感受不到服务的变化,因为暂停服务的时间很短。所以,对一台服务比较繁忙的客户机,动态迁移是比较困难的。

kvm的保存工作负载状态的静态迁移:

(1)在源宿主机上摁ctrl+alt+2 切换到monitor,使用以下命令保存客户机当前状态

savevm  my_tag  #my_tag是自定义的名称

(2)拷贝该客户机的镜像到新的宿主机上,用跟在源宿主机一样的命令参数启动镜像,并且使用到monitor模式使用以下命令恢复状态

loadvm my_tag

注意:savevm特性只有特定的镜像文件格式才支持,如qcow2,qed等。

202935b617c9c41aa0ca85bea0d08685.png

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

1.在使用共享存储的情况下,kvm的具体动态迁移过程为:

(1)目的宿主机启动共享存储上的客户机镜像并监听一个套接字,用来接收客户机的信息

(2)客户机依然在源宿主机上运行,与此同时客户机的内存页被传输到目的宿主机上

(3)kvm监控并记录下迁移过程中所有已经被传输的内存页的任何修改

(4)当所有的内存也被传输完成后,kvm开始传输内存页的修改内容

(5)kvm估算迁移过程中的传输速度,当剩余的数据量能够在一个可设定的时间周期(kvm默认30ms)完成的时候,kvm关闭源宿主机上的客户机,并传输剩下的内容

(6)目的宿主机收到最后的数据量,并依照这些数据恢复客户机的状态

由上述过程可以得知,当内存的修改速度大于kvm传输内存的速度之时,kvm的动态迁移过程是完成不了的

2.具体实现:

架构:

源宿主机:192.168.2.127

目的宿主机:192.168.2.188

nfs服务器:192.168.2.138

(默认关闭selinux和iptables)

在192.168.2.138上:

(1)配置nfs服务器(参考https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-nfs.html,这里只搭建,不解释)

yum install nfs-utils rpcbind -y #我的是centos6.5 默认已装rpcbind等,比较旧的系统好像rpc是portmap实现的,根据自己的情况来

echo "/mydata 192.168.2.0/24(rw)" >/etc/exports#三段式命令,/mydata代表把这个目录export出去作为共享存储目录,192.168.2.0/24代表允许这个段的主机挂载,(rw)代表读写权限,各个用户主机可以对其读写

chown -R nfsnobody:nfsnobody /mydata    #因为用户挂载这个目录是以nfsnobody的身份来的,所以要能读这个目录读写,还必须让nfsnobody对其有写权限

service nfs start

(2)创建磁盘镜像

dd if=/dev/zero of=/mydata/redhat6.5.img bs=1024 count=10240000

(3)安装系统

qemu-system-x86_64  -m 1024 -smp 1 -boot order=dc -hda /mydata/redhat6.5.img   -cdrom  install.iso  #install.iso是我利用kickstart制作的一键安装系统镜像

chown -R nfsnobody:nfsnobody /mydata   #因为安装镜像用的root身份,需要对其读写还是要改回nfsnobody

在源宿主机上:

(1)挂载nfs

mount 192.168.2.138:/mydata /mydata

(2)启动镜像

qemu-system-x86_64  -m 1024 -smp 1 /mydata/redhat6.5.img  -net nic -net tap #网络方面的配置请参考我前面的文档,有现成的脚本

在目的宿主机上:

(1)挂载nfs

mount 192.168.2.138:/mydata /mydata#这里的挂载的目录路径必须和源宿主机一样,原因的话可能是迁移过程中有路径依赖吧..个人猜测,有待查询

(2)启动镜像

qemu-system-x86_64  -m 1024 -smp 1 /mydata/redhat6.5.img  -net nic -net tap -incoming tcp:0:6666

#启动参数必须和源宿主机一致,只是额外多了-incoming ,启动后会黑屏,它并不是向普通客户机那样启动,而是等待动态迁移数据的传入

29e05ca1142539fa61ba8bf80f05e807.png

在源宿主机上:

ctrl+alt+2 进入qemu monitor模式使用以下命令进行迁移:

migrate tcp:192.168.2.188:6666

36146683128f1990ff8f0a6bfc0dbac7.png

接下来就可以看到源宿主机的客户机黑屏,而目的宿主机的客户机成功启动,至此一个客户机的动态迁移完成。

36a359de628b5a9260e3b7cf259e803b.png

基于后端镜像文件的动态迁移:

在源宿主机上:

qemu-img create create -f qcow2 -o backing_file=redhat6.5.img,size=20G redhat6.5.qcow2#创建镜像文件

qemu-system-x86_64 -m 1024 -smp 1  redhat6.5.qcow2 -net nic -net tap

在目的宿主机上:

qemu-img create create -f qcow2 -o backing_file=redhat6.5.img,size=20G redhat6.5.qcow2

qemu-system-x86_64 -m 1024 -smp 1  redhat6.5.qcow2 -net nic -net tap -incoming tcp:0:8888

在源宿主机上:(切换到monitor模式)

migrate -i tcp:192.168.2.188:8888

基于后端镜像文件的动态迁移的好处是不需要共享存储,我们可以事先把后端镜像文件拷贝到各个节点,因为启动时是启动镜像文件,而镜像文件的改动不会写入到后端镜像文件,所以动态迁移时只需要拷贝镜像文件的部分,效率大大提供。这也就是所谓的增量动态迁移。

monitor模式下使用help migrate 可以查看命令帮助

migrate:

:不使用任何参数代表基于共享存储的动态迁移

-i:incremental增量动态迁移

-b:block 也就是连同整个磁盘在内的动态迁移。这种方式不需要共享存储,也不需要创建镜像,但是缺点也显而易见

-d:表示不需要等待动态迁移完成就释放monitor窗口,使用这个命令后我们就可以在monitor下执行其他migrate相关的命令

比如:

migrate_cancel:取消当前的迁移

migrate_set_speed: 设置最大传输速度(因为迁移中传输数据有可能造成网络拥堵)

migrate_set_downtime:设置最低传输时间,最后的数据传输时间低于这个时间就关闭客户机

普通的迁移:

跟基于后端镜像的动态迁移差不多,只不过不需要镜像和migrate 使用-b参数

vt-d/SR-IOV的动态迁移:

这种可以使用热插拔设备,具体的可以参考官网说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值