openstack 热迁移(Live Migration)和冷迁移(Cold Migration)
一.迁移分类
1.冷迁移(cold migration),也叫静态迁移。
在迁移到另外的计算节点时,这段时间虚拟机实例是处于宕机状态的,即关闭电源的虚拟机进行迁移。
通过冷迁移,可以选择将关联的磁盘从一个数据存储移动到另一个数据存储,实例需要重启才能工作。
适用于对象系统可用性要求不是很高的时候,迁移过程中会关机, 拷贝 instance 的镜像文件和重建 libvirt.xml (这个配置文件中会涉及网络环境, 存储设备等配置), 并重新在目标主机上启动。
优点:虚拟机不需要位于共享存储器上,数据丢失率小。
缺点:需要关闭电源,业务中断。
2.热迁移(Live Migration),又叫动态迁移、实时迁移。
即虚拟机保存/恢复(Save/Restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。
恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。
在线迁移 (或 '真正的在线迁移')。实例几乎没有宕机时间。用于当实例需要在迁移时保持运行。在线迁移有下面几种类型:
- 基于共享存储的在线迁移(Live migration): 需要实例保存在NFS共享存储中,所有的Hypervisor都可以访问共享存储,主要是实例的内存状态的迁移,速度会很快。
- 块在线迁移(Block migration):不要求实例存储在共享文件系统中,即无须共享存储。当各主机上vm使用的是本地存储, 而不是共享存储时, 要实现迁移, 需要实现镜像文件和内存状态同时迁移,还得迁移磁盘文件,速度会慢些。
- 基于卷的在线迁移:实例都是基于卷的而不是临时的磁盘,无须共享存储,也支持迁移(目前仅支持基于libvirt的hypervisor)。
优点:软件和硬件系统的维护升级,不会影响用户的关键服务,提高了服务的高可用性和 用户的满意度。
缺点:过程不可中断,操作复杂。
二. 虚机迁移场景
场景 1:
物理机器硬件系统的维护,故障修复和升级(upgrade),但运行在这台物理机器上的虚拟机不能关机,因为用户重要的服务跑在上面。场景 2:
物理机器软件系统升级,打补丁(patch),为了不影响上面跑的虚拟机,在升级和打补丁之前,需要把虚拟机迁移到别的物理机器上。场景 3:
一个物理机器上的负载太重,需要减少一些虚拟机来释放资源。场景 4:
跨域环境下,有的域里有的物理机上的虚拟机太多,有的域里物理机上虚拟机太少,做一下资源平衡。
三.虚拟机迁移中数据处理
虚拟机的迁移,就是数据的转移,如果计算节点之间没有共享存储,所以要转移的数据包括两部分:
- 静态数据:
存储在本地的虚拟机的镜像文件,包括后端镜像(libvirt Base)和虚拟机单独的增量镜像文件(libvirt instance disks)。 - 动态数据:
内存里虚拟机的运行时数据,内存里的数据是动态变化的数据,虚拟机里运行的负载的大小直接影响迁移的时间长短。
Qemu一般通过数据迁移准备、数据迁移、数据迁移收尾三个步骤来完成
循环调用磁盘和内存迁移函数也是按阶段来分别调用的。
1.数据迁移准备:
循环调用磁盘和内存迁移函数的迁移数据准备功能,即前期准备工作,
把磁盘按block为单位组织成一个数组,并设置记录脏块机制;
把内存所有页全部设置为脏页,并发送开始迁移的标志到VM’的进程。
2.数据迁移:
Qemu在这个阶段调用磁盘和内存迁移函数的第二步骤功能,并且要求必须等磁盘数据迁移完成后才会执行内存数据迁移。
如图所示,Qemu首先会进行磁盘(内存)的全量数据迁移,依次将每个block(页)迁移到目标端DestHost。
然后再通过多次迭代,将迁移过程中虚拟机产生的新数据迁移到目标端DestHost(如图所示)。
这一迭代过程是收敛的,收敛依据与之前设置的带宽、最大停机时间有关。
同时,在迭代过程中,Qemu将边迁移边记录剩下的脏数据大小,并与停机时间进行比较。
如果这个值比停机时间大,那么继续迁移,如果比停机时间小,那么源端Qemu进程就会暂停,从而避免产生新的脏数据,以便进行迁移收尾工作。
3.数据迁移收尾:
在虚拟机暂停之后,进入第三步迁移收尾工作,源端Qemu进程会把磁盘、内存脏数据和设备状态一次性同步到目标端,完成时VM和VM’的数据将会一致。
这时,上层管理软件会把VM关闭,并把VM’的vcpu恢复运行状态,整个虚拟机的数据迁移就完成了。
四.虚拟机迁移中存储
- 共享存储
虚拟机的数据存在共享磁盘上(Shared storage-based live migration),迁移只需要完成内存数据的迁移。
- 非共享存储
虚拟机的数据存在本地磁盘(block migration),需要对镜像文件和内存数据同时迁移。
五.迁移步骤
5.1 冷迁移步骤
- 关闭虚拟机
- 找到虚拟机位于 /var/lib/nova/instances 下文件
- 将虚拟机的文件全部 copy 到目标主机的相同位置下
- 修改用户组
- 更新数据库中 host,node 字段为目标主机的名字
- 重启目标主机的 nova-compute服务
操作记录
1. 显示运行的虚机
2.关闭虚机
3.将文件copy到目标主机的对应位置下
4.修改权限
5.修改数据库中的字段
update instances set host='compute15', node='compute15' where uuid='3483d9f1-4015-48d9-9837-b67ca82dd54d';
6.查询虚机所在的主机
7.启动虚机
5.1 热迁移步骤:
- 迁移前的条件检查
- 迁移前的预处理
- 迁移过程
- 迁移后的处理
1. 迁移前的条件检查
动态迁移要成功执行,一些条件必须满足,所以在执行迁移前必须做一些条件检查。
1、权限检查,执行迁移的用户是否有足够的权限执行动态迁移。
2、参数检查,传递给 API 的参数是否足够和正确,如是否指定了 block-migrate 参数。
3、检查目标物理主机是否存在。
4、检查被迁移的虚拟机是否是 running 状态。
5、检查源和目的物理主机上的 nova-compute service 是否正常运行。
6、检查目的物理主机和源物理主机是否是同一台机器。
7、检查目的物理主机是否有足够的内存(memory)。
8、检查目的和源物理主机器 hypervisor 和 hypervisor 的版本是否相同。
2.迁移前的预处理
在真正执行迁移前,做一些准备工作
1、在目的物理主机上获得和准备虚拟机挂载的块设备(volume)。
2、在目的物理主机上设置虚拟机的网络(networks)。
3、目的物理主机上设置虚拟机的防火墙(fireware)。
3.迁移过程
条件满足并且做完了预处理工作后,就可以执行动态迁移了。主要步骤如下:
1、调用 libvirt python 接口 migrateToURI,来把源主机迁移到目的主机。
2、以一定的时间间隔(0.5)循环调用 wait_for_live_migration 方法,来检测虚拟机迁移 的状态,一直到虚拟机成功迁移为止。
4.迁移后的处理
当虚拟机迁移完成后,要做一些善后工作。
1、在源物理主机上 detach volume。
2、在源物理主机上释放 security group ingress rule。
3、在目的物理主机上更新数据库里虚拟机的状态。
4、在源物理主机上删除虚拟机。
上面四步正常完成后,虚拟机就成功的从源物理主机成功地迁移到了目的物理主机了。
操作记录
1.热迁移需要libvirt远程登录和传输,所以开启libvirt的TCP连接方式
virsh -c qemu+tcp://172.171.8.14/system
例如:qemu+tcp://172.16.0.15/system,服务端只需要配置。
修改/etc/libvirt/libvirtd.conf:listen_tls = 0 listen_tcp = 1 tcp_port = "16509" listen_addr = "0.0.0.0"auth_tcp = "none"
2.修改libvirtd的配置文件/etc/default/libvirtd:
# Start libvirtd to handle qemu/kvm:start_libvirtd="yes"# options passed to libvirtd, add "-l" to listen on tcplibvirtd_opts="-d -l --config /etc/libvirt/libvirtd.conf"
3.以上修改后,执行
service libvirt-bin restartnetstat -anpt | grep libvirt
可以看到libvirtd监听在TCP 16509端口。
4.配置nova.conf
计算节点的/etc/nova/nova.conf文件中添加如下的内容,使得compute服务支持热迁移。
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE
5.重启nova-compute
service nova-compute restart
6.修改用户组
查看目标主机的用户组信息
id nova
7. 修改所有计算节点为相同的用户组id。
usermod -u *** novausermod -u *** libvirt-qemugroupmod -g *** novagroupmod -g *** kvm
8.openstack迁移命令
查看所有实例
nova list
9.查看需要迁移虚拟机实例
nova show [实例id]
10.查看可用的计算节点
nova-manage service list
11.查看目标节点资源
nova-manage service describe_resource computer1
12.开始迁移,正常无任何回显
nova live-migration [实例id] [计算节点]
操作记录
1.查看虚拟机
2.查看虚拟机所在计算节点
3.迁移
4.查看迁移后的虚拟机所在节点
5.在迁移过程中,dashboard中会出现正在迁移的任务
openstack 热迁移(Live Migration)和冷迁移(Cold Migration)相关推荐
- (fuel)openstack 冷迁移+热迁移
前言:在已经搭建好的openstack上进行虚拟机迁移,在此之前需要先创建一个虚拟机实例,具体创建过程自行百度(随便创建一下就好了,作为demo也不需要这个实例能联网啥的),参考博客openstack ...
- KVM虚拟机共享存储动态迁移与冷迁移
运行环境 一. 配置nfs共享服务器 二. 配置KVM虚拟化 三. 创建桥接网卡 四. 配置kvm服务器并实现动态迁移 五. 配置冷迁移 运行环境 KVM虚拟机两台(linux 7.4) IP地址:1 ...
- openstack冷迁移/Resize源码分析(二)
接上一篇 openstack冷迁移/Resize源码分析(一) 执行冷迁移/Resize /nova_queens/nova/compute/manager.py @wrap_exception()@ ...
- 2021 => KVM冷迁移与热迁移
KVM冷迁移
- Nova组件源码分析之冷迁移与Resize
冷迁移与Resize 1.迁移是指将虚拟机从一个计算节点迁移到另外一个节点上.冷迁移过程中虚拟机是关机或是处于不可用的状态,而热迁移则需要保证虚拟机时刻运行. 2.Resize则是指根据需求调整虚拟机 ...
- 云迁移实践:VMware虚拟机迁移到OpenStack
1.迁移需求分析 VMware虚拟机迁移上云的方法很多,比如冷迁移.VMware虚拟机镜像方式导入OpenStack等,而且OpenStack也支持将VMware的vmdk文件直接导入. 考虑到国内市 ...
- Nova冷迁移与Resize
一 介绍 迁移是指将虚拟机从一个计算节点迁移到另外一个节点上.冷迁移是相对热迁移而言,区别在于冷迁移过程中虚拟机是关机或处于不可用状态,而热迁移则需要保证虚拟机时刻运行. Resize则是根据需求调整 ...
- Linux MySQL数据库冷迁移采坑记录
Linux MySQL数据库冷迁移采坑记录 当前文件系统已满,需要将MySQL默认路径迁移到新文件系统下. MySQL数据库文件原位置:/var/lib/mysql . 要移动至:/mysql/mys ...
- mysql2ora datacopy,oracle的clone及冷迁移(直接拷贝数据文件)
最近做了个oracle 10g数据冷迁移,很简单,但还是写一下基本的操作过程: 首先是准备迁移目标服务器,初始化环境,安装数据软件. 基本的环境初始化.依赖包先安装好.相关目录.用户都需要安装好(目标 ...
最新文章
- [zz]GNU C __attribute__ 机制简介
- 算法试题 - 找出字符流中第一个不重复的元素
- 如何在python官网下载pip_[Python]Pip的安装以及简单的使用
- 谭浩强c++程序设计知识点思维导图
- php面试 算法,PHP面试之常用算法 - 简庆旺个人博客|PHP教程|PHP学习|Python学习|Python教程|Seo学习|Seo教程...
- window7安装MongoDB详细步骤
- 微软云 mysql 重启_停止Azure MySQL PaaS数据库
- 令人厌恶的错误MSB3721,以及win10,VS2019,YOLO V4 环境搭建
- 如何测试网站服务器mysql数据库连接,如何测试网站服务器mysql数据库
- eclipse远程连接hive
- 第四季-专题4-嵌入式文件系统
- 【python】正则表达式re模块
- 批量解除文件锁定状态包含子文件夹
- java餐饮系统需求总结,基于java的餐饮管理系统的设计与实现开题报告
- html 获取header 元素,header标签元素基本介绍
- Oracle中TO_NUMBER()函数的用法
- DP转HDMI方案|CS5216方案应用|CS5216设计方案
- 中国风android,小鱼天气 - 水墨古典中国风 #Android
- html知识点总结1
- 中国版的Google被阉割掉多少?
热门文章
- Android 开发笔记“关闭默认键盘”
- Java实现replaceAll 把 \ 替换成 /
- 2020CCPC(威海) - Labyrinth(bfs+思维)
- 牛客 - 建通道(思维)
- HDU - 4685 Prince and Princess(强连通缩点+二分图完备匹配)
- PAT (Advanced Level) 1017 Queueing at Bank(模拟)
- UVA307 Sticks小木棍
- PyTorch-图像分类演示
- [SDWC2018 Day1]网格
- C语言程序设计 | 结构体内存对齐,位段