目录

源计算节点与目的计算节点之间的交互流程

热迁移主要包括三个阶段:

  • pre_live_migration 阶段:热迁移前的准备阶段,主要在目的计算节点上提前准备虚拟机资源,包括网络资源,例如:建立虚拟机的网卡,然后将网卡加入 OvS br-int 网桥。如果该阶段失败,会有回滚操作。

  • 内存迁移阶段:该阶段完全虚拟机虚拟内存数据的迁移,如果虚拟机的系统盘在计算节点本地,那么系统盘数据也会在此时进行迁移。如果该阶段失败,会有回滚操作,回滚流程和 pre_live_migration 阶段一致。

  • post_live_migration 阶段:热迁移完成后资源清理阶段,源计算节点主要是断开源计算节点上虚拟机的卷连接、清理源计算节点虚拟机的网卡资源;目的节点主要是调用 neutronclient,更新 Port Host 属性为目的计算节点。(NOTE:该阶段无需回滚流程,因为虚拟机实际上已经成功迁移,再回滚没有意义)

@startuml
autonumber entity shost
entity slibvirt
entity dhost
entity dlibvirt == pre_live_migration 阶段 ==
alt pre_live_migration successful case
group try...exception
shost -> shost: 设置虚拟机的 migration 状态为 `preparing`
shost -> shost: 获取虚拟机的卷信息
shost -> dhost: (RPC call) pre_live_migration() 在 dhost 上提前准备虚拟机迁移所需要的资源
dhost -> dhost: 获取虚拟机的卷信息
dhost -> dhost: 获取虚拟机的网络信息
dhost -> dlibvirt: 调用 Libvirt Driver 执行 driver.pre_live_migration
dlibvirt -> dlibvirt: 获取虚拟机镜像 image_meta 信息
dlibvirt -> dlibvirt: 创建虚拟机本地目录
dlibvirt -> dlibvirt: 连接虚拟机卷
dlibvirt -> dlibvirt: 创建虚拟机网卡并添加到 br-int
dlibvirt -> dhost: return pre_live_migration 执行结果
dhost -> shost: return pre_live_migration 执行结果
end
else pre_live_migration failure case (catch exception)
shost -> shost: _rollback_live_migration()
activate shost
shost -> shost: 获取 dhost 中虚拟机的卷的 bdms 信息
shost -> dhost: (RPC call) 清除虚拟机的卷连接信息
dhost -> dhost: 获取虚拟机的 bdms 信息,终止 volume_connection 断开卷
shost -> dhost: (RPC cast) 执行热迁移失败清理 rollback_live_migration_at_destination()
deactivate shost
dhost -> dhost: 清理虚拟机配置信息
dhost -> dhost: 清理虚拟机网卡信息,将网卡从 br-int 上 unbind
dhost -> dhost: 清理 dhost 上的虚拟机目录
end == 内存(本地系统盘)数据迁移阶段 ==
shost -> shost: 设置虚拟机的 migration 状态为 `migrating`
shost -> slibvirt: 正式进入 live migration 步骤
alt live_migration successful case
group try...exception
slibvirt -> slibvirt: 获取虚拟机的 disk path
slibvirt -> slibvirt: 开启额外的协程,监控虚拟机内存(本次系统盘)数据的拷贝过程
slibvirt -> dlibvirt: SSH/TCP & Pre-Copy/Post-Copy 数据拷贝
slibvirt -> shost: live_migration 成功,进入 post_live_migration 阶段
else live_migration failure case (catch exception)
shost -> shost: _rollback_live_migration()
note left: 处理过程同上
end == post_live_migration 迁移阶段 ==
shost -> shost: 获取虚拟机需要断开连接的 bdms 信息
shost -> slibvirt: 断开虚拟机 bdms 卷连接
note left: 此时 shost 上的虚拟机正式不可访问
shost -> shost: 调用 cinder api 断开 shost 虚拟机的 bdms
shost -> slibvirt: 执行 post_live_migration_at_source() 清理 shost 上虚拟机的网卡信息
shost -> dhost: (RPC cast) 执行 post_live_migration_at_destination()
dhost -> dhost: 获取虚拟机网络信息
dhost -> dhost: 调用 neutron api 更新 port host 为 dhost
dhost -> dhost: 获取虚拟机的状态,并更新虚拟机的 host、power_state、task_state 等状态
dhost -> dhost: 更新 dhost 资源
note left: dhost 上的 live migration 正式完成
shost -> slibvirt: 清理虚拟机在 shost 上的虚拟机目录、disk、config 等文件
shost -> shost: 释放 shost 上虚拟机所占用的资源
note left: shost 上的 live migration 正式完成
@enduml

Nova 和 Neutron 之间的交互流程

  • OVS Normal plug, Linux bridge, MacVTap, SR-IOV

  • OVS-Hybrid plug

OpenStack 虚拟机热迁移流程图的更多相关文章

  1. kvm虚拟机热迁移

    一.热迁移描述: 相比KVM虚拟机冷迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机热迁移无需拷贝虚拟磁盘文件,但是需要迁移到的宿主机之间需要有相同的目录结构虚拟机磁盘文件,也就是共享存储,本文这部分内 ...

  2. Kvm04 kvm虚拟机热迁移,可视化管理

    目录 1.kvm虚拟机热迁移 1). 冷迁移 修改配置文件,将定义的格式raw,改成qcow2格式! 修改完成,重启服务 2).热迁移 2.Virt-manager管理Kvm虚拟机 1.kvm虚拟机热 ...

  3. 华为云计算IE面试笔记-FusionCompute虚拟机热迁移定义,应用场景,迁移要求,迁移过程

    *热迁移传送了什么数据?保存在哪? 虚拟机的内存.虚拟机描述信息(配置和设备信息).虚拟机的状态 虚拟机的配置和设备信息:操作系统(类别.版本号).引导方式(VM通过硬盘.光盘.U盘.网络启动)和引导 ...

  4. OpenStack虚拟机冷迁移与热迁移

    一.虚拟机迁移分析 openstacvk虚拟机迁移分为冷迁移和热迁移两种方式. 1.1冷迁移: 冷迁移(cold migration),也叫静态迁移.关闭电源的虚拟机进行迁移.通过冷迁移,可以选择将关 ...

  5. OpenStack之虚拟机热迁移

    这里的环境是centos7版本,openstack K版 1.在各个计算节点设置权限 chmod /var/lib/nova/instances 2.修改各个节点的nova.conf(/etc/nov ...

  6. openstack实例热迁移

    [DEFAULT]scheduler_default_filters=AllHostsFilterallow_resize_to_same_host=Trueallow_migrate_to_same ...

  7. Openstack虚拟机在线迁移(Live Migration)

    Openstack VM live migration can have 3 categories: -Block live migration without shared storage -Sha ...

  8. OpenStack 虚拟机冷/热迁移功能实践与流程分析

    目录 文章目录 目录 前文列表 虚拟机迁移的应用场景 需要迁移的虚拟机数据类型 虚拟机迁移的存储场景 文件存储 块存储 非共享存储 迁移的类型 迁移的方式 执行虚拟机冷迁移 冷迁移日志分析 执行虚拟机 ...

  9. KVM 虚拟机的热迁移

    热迁移:顾名思义在虚拟机不关机的情况下将KVM虚拟机进行迁移 准备工作:两台KVM虚拟机,一台nfs虚拟机,centos7.4系统 主机 IP地址 主机名 KVM01 10.00.11 kvm01 K ...

随机推荐

  1. inotify和rsync实现数据实时同步

    数据的实时同步 实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上 实现实时同步的方法 ino ...

  2. sk_buff内核api函数记录

    1.alloc_skb() 上层协议要发送数据包的时候或网络设备准备接收数据包的时候调用 2.kfree_skb() 释放sk_buff结构体 3.skb_put() 在数据区的末端添加某协议的尾部 ...

  3. pip安装超时:Read timed out.

    环境:win10 和 pip 在pip install h5py(或者其他第三方依赖包时) 会出现Read timed out.的问题,即安装超时.如下图所示: 解决方法: 1. 在用户目录下,新建p ...

  4. WdatePicker日期控件使用与值获取,以及选择日期完毕触发事件

    踩过无数坑,调试了很长时间,写出适合自己需求的方法需求:没有查询按钮,要求选择日期后自动触发查询事件(只有日期选择完成后才触发), 解决方案:代码如下:检索开始时间: <input type=& ...

  5. 【转】Elastic-Job

    https://www.cnblogs.com/yushangzuiyue/p/9655847.html 什么是Elastic-Job Elastic-Job是当当网大牛基于Zookepper,Qua ...

  6. C++语法备忘

    记录一些C++的语法方便日后查看. 1.C++初始化语法 C++中新增加了两种初始化语法,其中大括号初始化器需要C++11以上的实现,使用时可以加等号,也可以不加,而且大括号中可以不包含任何东西,这种 ...

  7. 从c到c++<一>

    逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节. 声明方式: bool result; result=true; 可以 ...

  8. MySQL进阶 9: 联合查询 - 查询语句1 union 查询语句2 union ...

    #进阶 : 联合查询 /* union 联合 合并: 将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union ... 应用语境: 要查询的结果来自多个表,但查询的列 ...

  9. 如何让DEV跳出的“提示试用版”的对话框不再显示

    在 使用DevExpress控件的时候.每次对窗体进行更改的时候,都会出现一个对话框.发布的时候 也会出现一个对话框.之前的解决方法是在发布的时候把licenses.licx给删除掉,但是这个方法治标 ...

  10. java中的文件上传下载

    java中文件上传下载原理 学习内容 文件上传下载原理 底层代码实现文件上传下载 SmartUpload组件 Struts2实现文件上传下载 富文本编辑器文件上传下载 扩展及延伸 学习本门课程需要掌握 ...