OpenStack的Resize和冷迁移代码解析及改进_第1页
OpenStack的Resize和冷迁移代码解析及改进_第2页
OpenStack的Resize和冷迁移代码解析及改进_第3页
OpenStack的Resize和冷迁移代码解析及改进_第4页
OpenStack的Resize和冷迁移代码解析及改进_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、OpenStack的Resize和冷迁移代码解析及改进OpenStack 的Resize(升级)功能,我们可以改变虚拟机的CPU核数、内存及磁盘大小,当然虚拟机只能向上升级,不允许向下降级。通过分析源代码,我们发现 Resize的过程其实就是冷迁移的过程,Resize多传进去了一个flavor参数。下面将分析OpenStack升级虚拟机和冷迁移的功能。一、前端入口(一) Resize/usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/instances/workflows/resize_insta

2、nce.py/usr/share/openstack-dashboard/openstack_dashboard/api/nova.py从代码可知,利用novaclient客户端,向后端发出升级请求 (二) 冷迁移/usr/share/openstack-dashboard/openstack_dashboard/dashboards/admin/instances/tables.py/usr/share/openstack-dashboard/openstack_dashboard/api/nova.py从代码可知,利用novaclient客户端,向后端发出迁移请求二、后

3、端响应当novaclient发出请求时,一般由nova-api组件作出响应。我们将分别分析nova-api如何对resize和冷迁移进行响应。(一) Resize对Resize请求进行响应的函数位于文件/usr/lib/python2.7/dist-packages/nova/api/openstack/compute/servers.py继续深入self._resize()函数从上述代码可知,最后通过compute_api.resize进行调用,它传了instance和flavor_id两个参数进去 (二) 冷迁移/usr/lib/python2.7/dist-

4、packages/nova/api/openstack/compute/contrib/admin_actions.py从代码可知,冷迁移也调用了compute_api.resize(),相比Resize功能,它只传了instance一个参数进去(三) Resize和冷迁移的共同过程下面将从compute_api.resize()开始分析,这段代码位于文件/usr/lib/python2.7/dist-packages/nova/compute/api.py/usr/lib/python2.7/dist-packages/nova/conductor/api.pyNova-condu

5、ctor组件响应请求/usr/lib/python2.7/dist-packages/nova/conductor/manager.py函数_cold_migrate()通过上述代码我们发现,首先是通过rpc调用nova-scheduler组件调度最优节点。调度算法分为两个阶段,即filter和weight。首先是过滤(filter),从所有的主机中找到符合实例运行条件的主机,然后从过滤出来的主机中,找到最合适的一个主机。过 滤阶段系统默认调用的filter主要包括RetryFilter、AvailabilityZoneFilter、RamFilter、 ComputeFilter、Compu

6、teCapabilitiesFilter、ImagePropertiesFilter,其中比较重要的 filter包括AvailabilityZoneFilter和RamFilter,AvailabilityZoneFiter保证了调度发生在同一 个zone,RamFilter确保了内存是否足够,默认情况下,ram的扩大系数为1.5,也就是假如物理内存为100G,内存被虚拟为150G,通过 nova.conf配置文件,我们可以改变扩大系数。此外,通过配置文件,我们还可以改变调用的过滤器,除了上述过滤器外,我们还可以使用 CoreFilter、DiskFilter、IoOpsFilter等。这些

7、都是系统自带的过滤器,我们也可以根据需求,自己构造过滤器。Weight阶段,从它做的工作来看,就是从符合条件的主机中选择“最合适”的主机,这个选择的过程是通过“评分”来实现的。现阶段的weight很简单,主要通过RAMWeigher进行权衡,剩余内存越大,权值越大。目的节点nova-compute开始响应/usr/lib/python2.7/dist-packages/nova/compute/manager.py(2885)_prep_resize()/usr/lib/python2.7/dist-packages/nova/compute/manager.py(3020)resize_in

8、stance() /usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py(4487)migrate_disk_and_power_off()/usr/share/pyshared/nova/compute/manager.py:3153/usr/lib/python2.7/dist-packages/nova/compute/manager.py(3073)_finish_resize()/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py通过self._create_domain_and_network就成功创建了虚拟机。一、 不足与改进通过对Resize的分析,我们发现有以下几个缺陷1)AvailabilityZoneFilter迁 移过程中,会出现跨域的resize,availabilityZoneFilter好像并没有起到过滤错误,这是由于我们创建虚拟机时,虚拟机的域选择 为ramdom,因此AvailabilityZoneFilter过滤器会对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论