欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

OpenStack的Resize和冷遷移代碼解析及改進

系統 1907 0

原文: http://www.hengtianyun.com/download-show-id-79.html

OpenStack的Resize(升級)功能,我們可以改變虛擬機的CPU核數、內存及磁盤大小,當然虛擬機只能向上升級,不允許向下降級。通過分析源代碼,我們發現Resize的過程其實就是冷遷移的過程,Resize多傳進去了一個flavor參數。下面將分析OpenStack升級虛擬機和冷遷移的功能。

一、 前端入口

(一) ? Resize

/usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/instances/workflows/resize_instance.py

OpenStack的Resize和冷遷移代碼解析及改進

從上面的代碼可知,傳了兩個相關參數進去,第一個為虛擬機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

OpenStack的Resize和冷遷移代碼解析及改進

繼續深入self._resize()函數

OpenStack的Resize和冷遷移代碼解析及改進

從上述代碼可知,最后通過compute_api.resize進行調用,它傳了instance和flavor_id兩個參數進去?

(二) ? 冷遷移

/usr/lib/python2.7/dist-packages/nova/api/openstack/compute/contrib/admin_actions.py

OpenStack的Resize和冷遷移代碼解析及改進

從代碼可知,冷遷移也調用了compute_api.resize(),相比Resize功能,它只傳了instance一個參數進去

(三) ? Resize 和冷遷移的共同過程

下面將從compute_api.resize()開始分析,這段代碼位于文件

/usr/lib/python2.7/dist-packages/nova/compute/api.py

OpenStack的Resize和冷遷移代碼解析及改進 OpenStack的Resize和冷遷移代碼解析及改進

/usr/lib/python2.7/dist-packages/nova/conductor/api.py

OpenStack的Resize和冷遷移代碼解析及改進

Nova-conductor組件響應請求

/usr/lib/python2.7/dist-packages/nova/conductor/manager.py

OpenStack的Resize和冷遷移代碼解析及改進

函數 _cold_migrate()

OpenStack的Resize和冷遷移代碼解析及改進

通過上述代碼我們發現,首先是通過rpc調用nova-scheduler組件調度最優節點。調度算法分為兩個階段,即filter和weight。首先是過濾(filter),從所有的主機中找到符合實例運行條件的主機,然后從過濾出來的主機中,找到最合適的一個主機。

OpenStack的Resize和冷遷移代碼解析及改進

過濾階段系統默認調用的filter主要包括RetryFilter、AvailabilityZoneFilter、RamFilter、ComputeFilter、ComputeCapabilitiesFilter、ImagePropertiesFilter,其中比較重要的filter包括AvailabilityZoneFilter和RamFilter,AvailabilityZoneFiter保證了調度發生在同一個zone,RamFilter確保了內存是否足夠,默認情況下,ram的擴大系數為1.5,也就是假如物理內存為100G,內存被虛擬為150G,通過nova.conf配置文件,我們可以改變擴大系數。此外,通過配置文件,我們還可以改變調用的過濾器,除了上述過濾器外,我們還可以使用CoreFilter、DiskFilter、IoOpsFilter等。這些都是系統自帶的過濾器,我們也可以根據需求,自己構造過濾器。

Weight階段,從它做的工作來看,就是從符合條件的主機中選擇“最合適”的主機,這個選擇的過程是通過“評分”來實現的。現階段的weight很簡單,主要通過RAMWeigher進行權衡,剩余內存越大,權值越大。

當上述工作完成后,若未挑選出合適的節點,Resize過程結束,系統報錯,若挑選出了合適節點,開始Resize流程,首先,rpc調用目的節點的nova-compute,即self.compute_rpcapi.prep_resize。

目的節點nova-compute開始響應

/usr/lib/python2.7/dist-packages/nova/compute/manager.py(2885)_prep_resize()

OpenStack的Resize和冷遷移代碼解析及改進 OpenStack的Resize和冷遷移代碼解析及改進

在prep_resize階段,主要保存了虛擬機Resize前后的狀態,最后通過rpc調用源節點的nova-compute,即self.compute_rpcapi.resize_instance

/usr/lib/python2.7/dist-packages/nova/compute/manager.py(3020)resize_instance()

OpenStack的Resize和冷遷移代碼解析及改進 OpenStack的Resize和冷遷移代碼解析及改進

?

上述代碼,一個比較重要的過程就是遷移磁盤文件,該功能通過self.driver.migrate_disk_and_power_off這個函數實現,我們可以具體看一下這個函數

/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py(4487)migrate_disk_and_power_off()

OpenStack的Resize和冷遷移代碼解析及改進 OpenStack的Resize和冷遷移代碼解析及改進

通過上述步驟,成功把虛擬機的磁盤文件復制到了目的節點上,開始遷移的最后一步,創建虛擬機這一步通過rpc調用目的節點的nova-compute實現,即self.compute_rpcapi.finish_resize,其具體代碼如下。

/usr/share/pyshared/nova/compute/manager.py:3153

OpenStack的Resize和冷遷移代碼解析及改進

/usr/lib/python2.7/dist-packages/nova/compute/manager.py(3073)_finish_resize()

OpenStack的Resize和冷遷移代碼解析及改進

/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py

OpenStack的Resize和冷遷移代碼解析及改進 OpenStack的Resize和冷遷移代碼解析及改進

通過self._create_domain_and_network就成功創建了虛擬機。

一、? 不足與改進

通過對Resize的分析,我們發現有以下幾個缺陷

1)??????? ? AvailabilityZoneFilter

遷移過程中,會出現跨域的resize,availabilityZoneFilter好像并沒有起到過濾錯誤,這是由于我們創建虛擬機時,虛擬機的域選擇為ramdom,因此AvailabilityZoneFilter過濾器會對所有域的主機都放行,導致虛擬機升級到別的域域上去。

2)??????? ? 鏡像復制過程

遷移過程中,先會在源節點將增量鏡像和base鏡像進行合并,然后在復制到目的節點上,合并的過程比較耗時,我們可以直接將增量鏡像復制到目的節點,然后下載base鏡像,最后做一次rebase即可。

?

OpenStack的Resize和冷遷移代碼解析及改進


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 电视剧全部免费观看 | 欧美精品一区在线发布 | 极品xxxx欧美一区二区 | 久久精品视频在线观看 | www.色婷婷 | 二区精品视频 | 久草成人网 | 日本久久高清视频 | 成人自拍在线 | 国产精品视_精品国产免费 亚洲综合在线另类色区奇米 | 欧美一区视频 | 亚洲国产天堂久久精品网 | 欧美一区二区三区久久久 | 精品欧美一区二区三区在线 | 日本大片久久久高清免费看 | 波多野结在线 | 日本人妖miran护士 | 国产精品久久久久久吹潮 | 91青青操| 91精品久久一区二区三区 | 亚洲99影视一区二区三区 | 视频一区二区三区四区五区 | 久草视频在线资源 | 亚洲视频免费在线看 | 久久精品免费一区二区三 | 精品久久一二三区 | 99久久精品免费看国产免费 | 日本高清无遮挡 | 毛片毛片毛片毛片毛片怎么 | 久草网在线 | 国产一级片 | 日本高清无卡码一区二区久久 | 国产成人毛片 | 99久久精品国产一区二区三区 | 国产在线精品一区 | 亚洲一区在线观看视频 | 色综合天天综合网国产成人网 | 亚洲人成免费网站 | 国产精品久久久久久无遮挡 | 精品久久久久一区二区国产 | 亚洲精品一区中文字幕乱码 |