亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 1827 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條評論
主站蜘蛛池模板: 中文字幕最新中文字幕中文字幕 | 亚洲视频免费观看 | 一区二区三区在线免费观看视频 | 五月婷久久 | 午夜老司机福利 | 中文字幕一区2区 | 午夜人成| 国产99热在线观看 | 美女又黄又免费视频 | 四虎网站1515hh四虎 | 国产福利区一区二在线观看 | 国产成人亚洲综合91精品555 | 亚洲精品九色在线网站 | 国产成人精品一区二三区在线观看 | 在线成人aa在线看片 | 夜夜夜夜操 | 午夜宅男免费完整在线观看 | 奇米影视444 | 欧美日韩一卡二卡 | 大狠狠大臿蕉香蕉大视频 | 激情久久久久久久久久久 | 久热这里只有精品视频6 | 久久精品亚洲 | 天天躁天天碰天天看 | 国产边打电话边被躁视频 | 九九香蕉网 | 欧美aaaa黄色一级毛片 | 亚洲一二三 | 国产精品永久免费视频观看 | 涩综合| 波多野结衣三区 | 日本b站一卡二不卡 | 91精品国产高清久久久久 | 特级黄一级播放 | 国产精品一区在线观看你懂的 | 国产在线播放一区二区 | 91精品国产高清91久久久久久 | 日本不卡视频 | 日本韩国欧美在线观看 | 毛片网站大全 | 五月久久亚洲七七综合中文网 |