- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenStack的Resize和冷迁移代码解析及改进
OpenStack 的Resize(升级)功能,我们可以改变虚拟机的CPU核数、内存及磁盘大小,当然虚拟机只能向上升级,不允许向下降级。通过分析源代码,我们发现 Resize的过程其实就是冷迁移的过程,Resize多传进去了一个flavor参数。下面将分析OpenStack升级虚拟机和冷迁移的功能。
一、前端入口
(一)?Resize
/usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/instances/workflows/resize_instance.py
从上面的代码可知,传了两个相关参数进去,第一个为虚拟机id(instance_id),第二个为升级的flavor。继续深入api.nova.server_resize?
/usr/share/openstack-dashboard/openstack_dashboard/api/nova.py
从代码可知,利用novaclient客户端,向后端发出升级请求?
(二)?冷迁移
/usr/share/openstack-dashboard/openstack_dashboard/dashboards/admin/instances/tables.py
前段通过api.nova.server_migrate发起迁移请求,其中参数obj_id就是虚拟机的id,深入api.nova.server_migrate
/usr/share/openstack-dashboard/openstack_dashboard/api/nova.py
从代码可知,利用novaclient客户端,向后端发出迁移请求
二、后端响应
当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-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.py
Nova-conductor组件响应请求
/usr/lib/python2.7/dist-packages/nova/conductor/manager.py
函数_cold_migrate()
通过上述代码我们发现,首先是通过rpc调用nova-scheduler组件调度最优节点。调度算法分为两个阶段,即filter和weight。首先是过滤(filter),从所有的主机中找到符合实例运行条件的主机,然后从过滤出来的主机中,找到最合适的一个主机。
过 滤阶段系统默认调用的filter主要包括RetryFilter、AvailabilityZoneFilter、RamFilter、 ComputeFilter、ComputeCapabilitiesFilter、ImagePropertiesFilter,其中比较重要的 filter包括AvailabilityZoneFilter和RamFilter,AvailabilityZoneFiter保证了调度发生在同一 个zone,RamFilter确保了内存是否足够,默认情况下,ram的扩大系数为1.5,也就是假如物理内存为100G,内存被虚拟为150G,通过 nova.conf配置文件,我们可以改变扩大系数。此外,通过配置文件,我们还可以改变调用的过滤器,除了上述过滤器外,我们还可以使用 CoreFilter、DiskFilter、IoOpsFilter等。这些都是系统自带的过滤器,我们也可以根据需求,自己构造过滤器。
Weight阶段,从它做
文档评论(0)