OpenStack之Live-migration
我们考虑具有一个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相关推荐
- openstack 热迁移(Live Migration)和冷迁移(Cold Migration)
一.迁移分类 1.冷迁移(cold migration),也叫静态迁移. 在迁移到另外的计算节点时,这段时间虚拟机实例是处于宕机状态的,即关闭电源的虚拟机进行迁移. 通过冷迁移,可以选择将关 ...
- migration vmware vms to openstack kvm 修改vmware windows scsi to ide
如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘 (2013-03-28 09:11:32) 转载▼ 标签: vmware 虚拟机 虚拟磁盘 某些特殊的软件限定 ...
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(2)
二.nova-api 步骤3:nova-api接收请求 nova-api接收请求,也不是随便怎么来都接收的,而是需要设定rate limits,默认的实现是在ratelimit的middleware里 ...
- openstack组件之nova
一.nova介绍 nova是openstack 最核心的服务,负责维护和管理云环境的计算资源. 管理 VM 的生命周期 二.nova架构 nova 的架构比较复杂,包含很多组件. 这些组件以子服务(后 ...
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)
2019独角兽企业重金招聘Python工程师标准>>> 八.KVM 这一步,像virsh start命令一样,将虚拟机启动起来了.虚拟机启动之后,还有很多的步骤需要完成. 步骤38: ...
- OpenStack技术峰会PPT集萃
备受瞩目的OpenStack Days China大会将于7月14日-15日在北京国家会议中心举办,众多云计算领域优秀企业都将参加此次盛会,这也是本年度中国云计算技术领域规模最大.海内外云计算技术领袖 ...
- openstack之虚拟机管理命令
在控制节点上建hzb-openrc.sh export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_ ...
- CENTOS7.2使用RDO方式安装OpenStack Mitaka笔记
CENTOS7.2使用RDO方式安装OpenStack Mitaka笔记 1.配置/etc/hosts 192.168.13.108 openstack 2.配置OpenStack Mitaka安装源 ...
- 解码resources时里面是空的_深度解码超实用的OpenStack Heat
启迪云-高级网络工程师 邸小丽 Heat 是由AWS的EC2 Cloud Formation 演化而来,是openstack中负责Orchestration的service, 用于openstack ...
- 使用alembic进行openstack数据库版本管理
在线更新 1. alembic init <YOUR_DIR># 此处,我用的是alembic_v 2.修改alembic.ini.如下: sqlalchemy.url = driver: ...
最新文章
- 如何高效地逛Github?
- 兄弟9020cdn废粉仓位置_硒鼓的无废粉仓设计是否真的有效?
- 关于c++变长参数列表总结
- 如何利用CIC滤波器、CIC补偿滤波器和半带滤波器设计一个高频数字抽取滤波器
- MySQL解压缩安装
- learning ddr pagesize calculate
- 02丨基础篇:到底应该怎么理解“平均负载”?
- Python模块整理(四):线程模块threading
- FreeType, FFmpeg, SDL, 图像处理软件, Mac OS X, Objective-C
- How to debug Material delta download
- 程序配置amp;amp;ConfigurationManager
- REVERSE-PRACTICE-BUUCTF-7
- 进程/线程间的同步方式
- python ichat_Python使用微信itchat接口实现查看自己微信的信息功能详解
- oracle获取两个月前的时间
- mysql 上周时间_mysql 获取上周1到周日的时间
- vs中开发web项目IIS Express支持局域网连接
- 探究:软件工程中的test oracle到底是什么意思?
- 苹果Home键恢复(无工具篇)
- Redis(八) - Redis企业实战之优惠券秒杀