我们考虑具有一个port的VM由带有nova-compute1、neutron-l2-agent1 和 neutron-l3-agent1的主机host1,迁移到带有nova-compute2、neutron-l2-agent2 和 neutron-l3agent2的主机host2.

由于准备迁移的VM的宿主机为nova-compute1,nova通过RPC向nova-compute1发送live-migration的指令。

Nova Live Migration包含以下的阶段:

  • Pre-live-migration

  • Live-migration-operation

  • Post-live-migration

Pre-live-migration actions

Nova-compute1首先通过一个同步的RPC调用请求ova-compute2执行re-live-migration动作。Nova-compute2将使用Neutron REST API获取VM的端口列表。之后,调用它的VIF驱动通过函数plug_vifs()创建VM的port端口(VIF)。

如果使用的是Open vSwitch Hybrid plug,Neutron-l2-agent2将会检测到此新VIF,并且从Neutron服务器请求设备的详细信息,据此配置它。尽管如此,port的状态不会改变,因为此port还没有绑定到nova-compute2.

Nova-compute1调用setup_networks_on_hosts。此举将使用目标主机的信息更新Neutron端口的binding:profile。Neutron服务器发出的port更新RPC消息,将由neutron-l3-agent2接收到,其主动的设置DVR router。

如果pre-live-migration阶段失败,Nova将回滚,并从host2删除port。如果pre-live-migration阶段成功,Nova继续live-migration-operation阶段。

网络相关的潜在错误

  • 在host2插入 VIFs 失败

    由于Live Migration还没有开始,host1主机上的实例还处于ACTIVE状态.

Live-migration-operation

一旦nova-compute2完成了pre-live-migration阶段的动作,nova-compute1可开始live-migration。这将导致在节点2上创建VM及其相关的TAP接口。

对于Open vSwitch normal plug的情况,使用Linux网桥或者MacVTap,Neutron-l2-agent2将检测到此新TAP设备,并相应的配置它。尽管如此,port的状态不会改变,因为此port还没有绑定nova-compute2.

一旦实例在host2上变得活动,删除host1上的原始实例及其对应的TAP设备。假设OVS-hybrid plug没有使用,Neutron-l2-agent1将检测到删除操作,并告知Neutron服务器通过RPC消息设置port的状态到DOWN。

在live-migration-operation阶段如果失败没有回滚机制。另外,错误由post-live-migration阶段处理。

网络相关的潜在错误

  • 在实例定义中指定的主机设备不会出现在目标主机中。在它真正开始前Migration将失败。对于MacVTap代理将发生此错误,参见bug: https://bugs.launchpad.net/bugs/1550400

Post-live-migration actions

一旦live-migration阶段成功,nova-compute1 和 nova-compute2 都执行post-live-migration阶段动作。感知到成功的Nova-compute1发送RPC广播到nova-compute2告知其开始执行post-live-migration动作。

在host2上,nova-compute2发送REST调用"update_port(binding=host2, profile={})"到Neutron服务器,告知其更新port的绑定信息。这将清除port的绑定信息并将port的状态变为DOWN。ML2插件将根据它的新主机重新绑定port。此update_port REST调用总是触发port-update RPC删除消息到每个neutron-l2-agent。既然现在neutron-l2-agent2拥有此端口,它将考虑此消息,并通过RPC消息向Neutron服务器请求此port的详细信息,重新同步端口。这将port的状态从DOWN变为BUILD,随后回到ACTIVE。

此更新还将从portbindng字典删除“migrating_to”值。并不是向{}表示的完全清除,而是仅删除“migrating_to”的键和值。

在host1上,ova-compute1调用其VIF驱动拔出VM的port。

假设,使用Open vSwitch Hybrid plug,Neutron-l2-agent1检测到此删除,并通过RPC消息告知Neutron服务器设置port的状态到DOWN。对于其它情况,此发生在实例及其TAP设备在host1上销毁的那一刻,正如live_mig_operation一节所描述。

如果Neutron没有处理REST调用"update_port(binding=host2)",port的状态实际上转变为BUILD,之后到DOWN。否则,port绑定到host2,Neutron不会改变port的状态,因为它没有绑定到发送RPC消息的主机。

如果post-live-migration阶段发送错误没有回滚机制。发送错误后,实例设置为“ERROR”状态。

网络相关的潜在错误

  • host2的Portbinding失败

    如果发生,port的vif_type设置为’binding_failed’。当Nova尝试在迁移目标上重新创建domain.xml时,它将失败于此无效的vif_type。实例设置到“ERROR”状态。

Post-Copy Migration

通常,Live Migration作为pre-copy迁移执行。实例在host1上是活动的,直到几乎所有的内存被拷贝到host2。在拷贝的内存达到一定阈值,在源主机上的实例暂停,拷贝剩余的内存,实例开始在目标主机运行。此方式的缺陷在于,当实例繁忙的写入内存时,迁移可能花费无尽的时间。

此问题由post-copy迁移解决。在一些时间点,host2上的实例设置为活动,虽然仍有大量的内存页仅驻留在host1。开始的阶段叫做post_copy阶段。如果实例试图访问还没有拷贝的内存页面,libvirt/qemu马上将此页移动到目标主机。新页面将只能写入源主机。使用此方式迁移操作花费有限的时间。

今天,从host1到host2的port重绑定发生在迁移完成之后的post_live_migration阶段。这对pre-copy没有影响,因为目标机上实例的激活与port绑定到目标机的时间差非常小。但这对post-copy迁移将带来问题。目标机上的实例很早就激活,但是portbinding仍然发生在迁移完成之后。在这段时间内,实例可能不能通过网络访问。这应解决参见bug:https://bugs.launchpad.net/nova/+bug/1605016

流程图

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

OVS-Hybrid plug

处理来自neutron-l2-agent的RPC消息的序列是在下面的UML序列图中描述:

OpenStack之Live-migration相关推荐

  1. openstack 热迁移(Live Migration)和冷迁移(Cold Migration)

    一.迁移分类 1.冷迁移(cold migration),也叫静态迁移. 在迁移到另外的计算节点时,这段时间虚拟机实例是处于宕机状态的,即关闭电源的虚拟机进行迁移.      通过冷迁移,可以选择将关 ...

  2. migration vmware vms to openstack kvm 修改vmware windows scsi to ide

    如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘 (2013-03-28 09:11:32) 转载▼ 标签: vmware 虚拟机 虚拟磁盘   某些特殊的软件限定 ...

  3. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(2)

    二.nova-api 步骤3:nova-api接收请求 nova-api接收请求,也不是随便怎么来都接收的,而是需要设定rate limits,默认的实现是在ratelimit的middleware里 ...

  4. openstack组件之nova

    一.nova介绍 nova是openstack 最核心的服务,负责维护和管理云环境的计算资源. 管理 VM 的生命周期 二.nova架构 nova 的架构比较复杂,包含很多组件. 这些组件以子服务(后 ...

  5. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)

    2019独角兽企业重金招聘Python工程师标准>>> 八.KVM 这一步,像virsh start命令一样,将虚拟机启动起来了.虚拟机启动之后,还有很多的步骤需要完成. 步骤38: ...

  6. OpenStack技术峰会PPT集萃

    备受瞩目的OpenStack Days China大会将于7月14日-15日在北京国家会议中心举办,众多云计算领域优秀企业都将参加此次盛会,这也是本年度中国云计算技术领域规模最大.海内外云计算技术领袖 ...

  7. openstack之虚拟机管理命令

    在控制节点上建hzb-openrc.sh export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_ ...

  8. CENTOS7.2使用RDO方式安装OpenStack Mitaka笔记

    CENTOS7.2使用RDO方式安装OpenStack Mitaka笔记 1.配置/etc/hosts 192.168.13.108 openstack 2.配置OpenStack Mitaka安装源 ...

  9. 解码resources时里面是空的_深度解码超实用的OpenStack Heat

    启迪云-高级网络工程师 邸小丽 Heat 是由AWS的EC2 Cloud Formation 演化而来,是openstack中负责Orchestration的service, 用于openstack ...

  10. 使用alembic进行openstack数据库版本管理

    在线更新 1. alembic init <YOUR_DIR># 此处,我用的是alembic_v 2.修改alembic.ini.如下: sqlalchemy.url = driver: ...

最新文章

  1. 如何高效地逛Github?
  2. 兄弟9020cdn废粉仓位置_硒鼓的无废粉仓设计是否真的有效?
  3. 关于c++变长参数列表总结
  4. 如何利用CIC滤波器、CIC补偿滤波器和半带滤波器设计一个高频数字抽取滤波器
  5. MySQL解压缩安装
  6. learning ddr pagesize calculate
  7. 02丨基础篇:到底应该怎么理解“平均负载”?
  8. Python模块整理(四):线程模块threading
  9. FreeType, FFmpeg, SDL, 图像处理软件, Mac OS X, Objective-C
  10. How to debug Material delta download
  11. 程序配置amp;amp;ConfigurationManager
  12. REVERSE-PRACTICE-BUUCTF-7
  13. 进程/线程间的同步方式
  14. python ichat_Python使用微信itchat接口实现查看自己微信的信息功能详解
  15. oracle获取两个月前的时间
  16. mysql 上周时间_mysql 获取上周1到周日的时间
  17. vs中开发web项目IIS Express支持局域网连接
  18. 探究:软件工程中的test oracle到底是什么意思?
  19. 苹果Home键恢复(无工具篇)
  20. Redis(八) - Redis企业实战之优惠券秒杀

热门文章

  1. javafor循环基础练习 -26个大小写字母
  2. 计算机网络密码凭据,win7系统共享提示输入网络凭据用户名密码的解决办法
  3. 如何查看Excel文件最大行数
  4. 关于Mysql8.0时区表问题解决
  5. 一键还原的GHO文件夹打开方法(转载)
  6. Git Github操作简易教程
  7. 一种简单的业务数据监控告警设计方案
  8. 4种文件扩展名被阻止时发送邮件附件的方法
  9. BZOJ.4453.cys就是要拿英魂!(后缀数组 单调栈)
  10. python读写html文件乱码问题