企业级虚拟化实战之KVM——虚拟机迁移
迁移概述
系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行
在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术。在源主机上实时备份操作系统和应用程序的状态,然后把存储介质连接到目标主机上,最后在目标主机上恢复系统。随着虚拟机技术的发展,系统的迁移更加灵活和多样化。
迁移的目的:
- 简化系统维护管理
- 提高系统负载均衡
- 增强系统错误容忍度
- 优化系统电源管理
热迁移--live migration
热迁移(又叫动态迁移、实时迁移),即虚拟机保存(save)/恢复(restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。
迁移的种类 | 解释 |
---|---|
p2p | 物理机之间的迁移 |
v2p | 虚拟机迁到物理机 |
p2v | 物理机迁到虚拟机 |
v2v | 虚拟机迁到虚拟机 |
热迁移的应用
(1)双机容错或者负载均衡
当宿主机出现软硬件故障导致服务异常时,虚拟机可漂移到另外主机上,或者在集群中依据工作负载量的大小,选择更换宿主机与否来保证自身良好的服务提供性
(2)系统硬件维护
硬件需要定期维护,使用虚拟机的动态迁移技术,实现了服务不受硬件维护干扰的7*24小时运行
(3)数据库备份
将数据库运行在虚拟机中,如需备份就保存虚拟机,如果数据库崩溃,可以通过恢复虚拟机来恢复整个数据库
(4)环境重现
进行性能测试或程序调试时,需要重现当时复杂庞大且完全一致的网络环境 ,需要一定的运行时间,将各服务安装到独立的各个虚拟机,利用各个独立虚拟机部署所需的工作环境,可以大大缩短环境重现时间
(5)计算机共享
在一些公共场合共享计算机,由于不同的系统配置和软件需要大量的时间,使用虚拟机的保存/恢复可以缩短配置和恢复时间;也可以在物理机上运行多个逻辑虚拟机分配给每一个需要者一个独立、安全、稳定的环境,当因为宿主机出现问题影响虚拟机使用时,我们可以让该虚拟机漂移到其他宿主机以此来保持正常工作
热迁移的优势
1.首先是可伸缩性比较强,it管理者可以在合理时间段让运行某些关键业务的服务器适当减少工作量,以便进行更新操作系统,给应用程序打补丁等。而到了服务高峰期,又可以弹性地进行大负载量的运算。虚拟机迁移过程完全透明,几乎不影响使用。
2.其次,现在的数据中心都追求环保节能,工作量负载大的应用程序必然会令服务器能耗增加,有了虚拟机热迁移技术,当一台物理服务器负载过大时,系统管理员可以将其上面的虚拟机迁移到其他服务器,可有效减低数据中心服务器的总体能耗,再通过冷却系统将数据中心的温度保持在正常水平。
热迁移的局限
进行虚拟机的热迁移也有不少的限制。例如,vmotion在进行迁移之前,管理软件会检测目标服务器的x86架构是否与原服务器兼容,包括存储设备以及处理器,虚拟机必须放到共享的存储里,cpu 的类型也要一样,不仅不能一个是英特尔, 一个是amd,甚至相同厂商不同产品线的cpu也不行,比如英特尔至强和奔腾
衡量虚拟机迁移的效率
(1)整体迁移时间
从源主机中迁移操作开始到目的主机上客户机服务处于不可用状态的时间,此时源主机上客户机已经暂停服务,目的主机上的客户机还未恢复服务。
(2)服务器停机时间
在迁移过程中,源主机和目的主机上的客户机都处于不可用状态的时间,此时源主机上客户机已暂停,目的目的主机上客户还未恢复服务。
(3)对服务的性能影响
不仅包括迁移后的客户机中应用程序的性能与迁移前相对比是否有所降低,还包括迁移后对目的主机上的其他服务的性能影响。
kvm动态迁移注意事项: 1.源宿主机和目的宿主机直接尽量用网络共享的存储系统来保存客户机磁盘镜像,例如nfs,iscsi,glusterfs等。 2.为了提高动态迁移的成功率,尽量在同类型cpu的主机上面进行动态迁移,从安全、稳定角度考虑不建议跨平台迁移。 3.64位的客户机只能运行在64宿主机之间的迁移,而32位客户机可以在32宿主机和64位宿主机 之间迁移。 4.在进行动态迁移时,被迁移客户机的名称是唯一的,在目的宿主机上不能有与源宿主机被迁移客户机同名的客户机存在。 5.目的宿主机和源宿主机的软件尽可能的相同,也就是同为vmware,kvm,xen等。
热迁移实例
kvm动态迁移目前有两种,一种是基于共享存储的动态迁移,一种是基于数据块的动态迁移,需要qemu-kvm-0.12.2以上版本支持,oel6.3版本是qemu-kvm-0.12.1.2,其它发行版可能有支持
虚拟化平台架构
nfs服务器配置
[root@python ~]# cat /etc/exports /nfs-storage 192.168.213.0/24(rw,sync,no_root_squash) [root@kvm ~]# showmount -e 192.168.213.163 export list for 192.168.213.163: /nfs-storage 192.168.213.0/24
宿主主机配置准备
(1)节点1挂载nfs目录(存储池)
[root@7u4-test ~]# virsh pool-define-as nfs-storage --source-format nfs --type netfs --source-host 192.168.213.163 --source-path /nfs-storage --target /nfs-storage [root@7u4-test ~]# virsh pool-start nfs-storage 池 nfs-storage 已启动
(2)节点2挂载nfs目录(存储池)
[root@kvm ~]# virsh pool-define-as nfs-storage --source-format nfs --type netfs --source-host 192.168.213.163 --source-path /nfs-storage --target /nfs-storage pool nfs-storage defined [root@kvm ~]# virsh pool-start nfs-storage pool nfs-storage started
确保两节点都有相同的虚拟机磁盘文件存储目录
kvm虚拟机配置
(1)上传镜像
#centos7u4是制作好的后备镜像 [root@7u4-test vmdisk]# scp centos7u4.qcow2 192.168.213.163:/nfs-storage
(2)在node1上创建虚拟机
基于后备镜像创建磁盘文件
[root@7u4-test ~]# qemu-img create -f qcow2 -b /nfs-storage/centos7u4.qcow2 /nfs-storage/node-7u4.img formatting '/nfs-storage/node-7u4.img', fmt=qcow2 size=10737418240 backing_file='/nfs-storage/centos7u4.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
创建虚拟机配置文件
[root@7u4-test ~]# vim /etc/libvirt/qemu/node-7u4.xml
(3)define虚拟机&&启动虚拟机
[root@7u4-test qemu]# virsh define node-7u4.xml 定义域 node-7u4(从 node-7u4.xml) [root@7u4-test qemu]# virsh list --all id 名称 状态 ---------------------------------------------------- 10 node-7u4 running - centos7-1 关闭 - centos7u4 关闭 - windows7 关闭
虚拟机迁移
(1)将虚拟机配置文件备份并传递到node2
#备份配置文件 [root@7u4-test ~]# virsh dumpxml node-7u4 >node-7u4.xml #将备份文件上传到node2上并添加到域 [root@7u4-test ~]# scp node-7u4.xml root@192.168.213.128:/root [root@kvm ~]# virsh define node-7u4.xml domain node-7u4 defined from node-7u4.xml
(2)迁移
因为测试我们忽略错误和安全隐患,此外需要配置主机名的host解析
[root@7u4-test ~]# cat /etc/hosts 192.168.213.171 7u4-test 192.168.213.128 kvm
同时给虚拟机配置好网络,并常ping
[ root@bogon nfs-storage ]# ping 192.168.122.100 | ping 192.168. 122.100 (192.168.122.100) 56(84) bytes of data. 54 bytes from 192.168.122.100: icmp seq=1 ttl=64 time=1.32 ms
在node1上虚拟机运行状态
[root@7u4-test ~]# virsh list --all id 名称 状态 ---------------------------------------------------- 10 node-7u4 running
在node2上虚拟机是停运状态
[root@kvm ~]# virsh list --all id name state ---------------------------------------------------- - node-7u4 shut off
配置免密互信,执行迁移命令
[root@7u4-test ~]# virsh migrate --live --verbose --abort-on-error --unsafe node-7u4 qemu+ssh://192.168.213.128/system root@192.168.213.128's password: 迁移: [100 %]
迁移完成后
[root@7u4-test ~]# virsh list --all id 名称 状态 ---------------------------------------------------- - centos7-1 关闭
[root@kvm ~]# virsh list --all id name state ---------------------------------------------------- 1 node-7u4 running
在ping的节点上查看,业务几乎没有中断(丢包可忽略,没有影响ping测试)
[root@python ~]# while true;do curl 192.168.213.188;sleep 1;done
问题与解决
1.在进行热迁移时,出现错误:unable to find security driver for model selinux
原因: 两个节点selinux状态不同,一个是selinux disabled,另一个是selinux permission
2.启动nfs中的虚拟机失败:could not open '/nfs-storage/node-7u4.img': permission denied
[root@7u4-test qemu]# virsh start node-7u4 错误:开始域 node-7u4 失败 错误:内部错误:process exited while connecting to monitor: 2020-05-07t13:59:15.032691z qemu-kvm: -drive file=/nfs-storage/node-7u4.img,format=qcow2,if=none,id=drive-virtio-disk0: could not open disk image /nfs-storage/node-7u4.img: could not open '/nfs-storage/node-7u4.img': permission denied
解决方法: 关闭selinux
3.虚拟机与宿主机不在同一网段
在节点上新增nat网卡,设置为bridge模式,使虚拟机成为网络中具有独立ip的主机
4.在进行热迁移时,出现错误:error: unable to connect to server at '7u4-test:49152': no route to host
原因: 免密登录没有成功,重新做免密登录;也有可能是firewalld导致迁移时免密失败
上一篇: 快速升级Zabbix 5.0 版本
下一篇: 初步进入Linux世界