管理虛擬機生命周期的組件是Nova。 Nova創建的虛擬機從后端存儲類型分為本地LVM存儲和遠程分布式存儲(例如:Ceph//)。 一般從啟動方式上分為鏡像啟動和卷啟動。 根據啟動方法和存儲后端,類可以有 4 種組合:
組合一:本地LVM+鏡像啟動
這樣,虛擬機鏡像一般會提前存儲在遠程分布式存儲(Ceph或Swift)上。 當計算節點上首次創建虛擬機時,會將鏡像從遠程分布式存儲下載到計算節點進行格式轉換并緩存為基礎鏡像,然后將完整鏡像復制到/var/lib/ nova//{-uuid} 作為系統盤目錄,耗時與鏡像大小和帶寬有關,一般都在幾分之一以上。
如果在同一個計算節點上第二次創建同一個鏡像的虛擬機,由于鏡像緩存已經存在,所以不需要從遠程分布式存儲下載鏡像,直接從本地復制鏡像計算節點到虛擬機啟動目錄作為系統盤,耗時與鏡像大小有關,一般需要幾分鐘以上。
組合二:本地LVM+卷啟動
這樣,虛擬機鏡像一般會提前存儲在遠程分布式存儲(Ceph或Swift)上。 當計算節點上第一次創建虛擬機時,鏡像會從遠程分布式存儲下載到計算節點進行格式轉換并緩存為base-image,然后調用base-image創建卷在控制節點上,最后使用卷啟動虛擬機。 耗時與圖像大小和帶寬有關,一般需要幾分鐘以上。
如果第二次從同一個計算節點上相同鏡像的卷創建虛擬機,由于已經有鏡像緩存,不需要從遠程分布式存儲下載鏡像,直接調用即可在控制節點上創建的基礎映像可用卷,最后用該卷啟動虛擬機。 耗時與圖像大小和帶寬有關,一般需要幾分鐘以上。
組合三:遠程分布式存儲Ceph+鏡像啟動(默認配置)
這樣,虛擬機鏡像一般會提前存儲在遠程分布式存儲Ceph上。 計算節點上第一次創建虛擬機時,首先從遠程Ceph下載鏡像到計算節點進行格式轉換并緩存為基礎鏡像,然后將基礎鏡像上傳到計算節點的池中。遠程Ceph Rbd作為系統盤,最終使用池中的系統盤啟動虛擬機。 耗時與圖像大小和帶寬有關,一般需要幾分鐘以上。
在同一計算節點上第二次創建相同鏡像的虛擬機。 因為已經有鏡像緩存,所以不需要從遠程Ceph下載鏡像,直接將base-image上傳到遠程Ceph Rbd池作為系統盤。 最后,使用池中的系統磁盤啟動虛擬機。 耗時與圖像大小和帶寬有關,一般需要幾分鐘以上。
組合4:遠程分布式存儲Ceph+卷啟動(默認配置)
這樣,虛擬機鏡像一般會提前存儲在遠程分布式存儲Ceph上。 在計算節點上第一次創建虛擬機時,會先從遠程Ceph下載鏡像到計算節點進行格式轉換并緩存為base-image,然后調用base-image創建可啟動的鏡像遠程 Ceph Rbd 池中的卷,最后使用 Ceph Rbd 池中的卷啟動虛擬機。 耗時與圖像大小和帶寬有關,一般需要幾分鐘以上。
在同一個計算節點上,第二次使用同一個鏡像啟動帶卷的虛擬機,因為已經有鏡像緩存,不需要從遠程Ceph下載鏡像,直接調用base-遠程Ceph Rbd池中的鏡像創建一個可行的啟動卷,最后使用Ceph Rbd池中的卷啟動虛擬機。 耗時與圖像大小和帶寬有關,一般需要幾分鐘以上。
在幾秒鐘內創建虛擬機優化解決方案
在優化之前,如果按照以上四種組合中的任意一種來創建虛擬機,如果批量創建上百個虛擬機,整個創建過程會因為下載、上傳或者復制鏡像的過程而非常耗時。 接口超時導致失敗。
為了達到秒級創建虛擬機的性能,采用Ceph作為Nova和Nova后端存儲的共享存儲。 上傳的虛擬機鏡像將上傳到Ceph池,創建的卷將保存在Ceph池中,Nova系統盤將保存在池中。
如果創建帶鏡像的虛擬機,選擇同一個計算節點上的同一個鏡像,無論是第一次還是第二次創建虛擬機,都會直接先基于ceph池的鏡像進行,然后基于它克?。▽憰r復制)到池中,最后用系統盤啟動虛擬機。 利用ceph的copy-on-write特性,沒有鏡像的上傳、下載和完整復制,因此創建速度非???,可以達到秒級。
如果開始創建帶卷的虛擬機,選擇同一個計算節點上的同一個鏡像,無論是第一次還是第二次創建虛擬機,都會直接根據ceph的鏡像來完成首先調用基于它的克?。▽憰r復制)到Ceph池,最后用這個卷啟動虛擬機。 利用ceph的copy-on-write特性,沒有鏡像的上傳、下載和完整復制,因此創建速度非???,可以達到秒級。
秒級創建虛擬機的優化步驟如下:
1、修改控制節點上的/etc//-api.conf鏡像配置文件,將l參數設置為True。
vim /etc//-api.conf
注意:一定要在【】下添加。
然后使用命令--api重啟鏡像管理服務。
2. 轉換圖像格式。 上傳的圖像必須是原始格式。
上傳之前,需要先轉換命令再上傳,轉換命令:
qemu-img -O raw src-img.-img.raw
使用命令行轉換為raw格式主要解決以下沒有問題。
3. 進入計算節點的/var/lib/nova//_base/目錄,清除該目錄下的所有緩存鏡像。 因為后臺程序會先檢查目錄下是否有緩存鏡像,如果有,則將緩存鏡像上傳到ceph,如果沒有,則直接clone ceph中的鏡像。
請按如下方式進行:
[root@_base]# cd /var/lib/nova//_base/
[root@_base]#ll
-rw-r--r--。 1 qemu qemu 七月 24 01:35
[root@_base]# rm -35
[root@_base]#ll
總計 0
4、相關流程源碼如下:
[root@ ~]# vim /usr/lib/.7/site-/nova/virt//.py
[root@~]#vim /usr/lib/.7/site-/nova/virt//.py
[root@ ~]# vim /usr/lib/.7/site-//api/v2/.py
總結
上述虛擬機創建的不同類型從核心原理分析實際上只有兩種組合。 一種需要圖像的完整副本,另一種是寫入時復制。
1.完整復制鏡像創建虛擬機
優點:每個虛擬機都是獨立的,不會互相影響。
缺點:有鏡像下載、上傳或復制,創建速度慢。
2.寫時復制(寫)
優點:每次創建虛擬機時只有很小的增量文件,沒有完整的鏡像副本,創建速度很快。
缺點:使用同一映像創建的所有虛擬機都依賴于通用的基礎映像。 如果基礎鏡像被意外損壞或刪除,上層依賴的虛擬機將會受到影響。
速度和安全往往是一對矛盾,兩種方法需要權衡。 全量復制鏡像創建虛擬機的方案可以提高硬件性能,比如通過高配置的磁盤和帶寬來減少復制鏡像的時間。 在寫時復制(copy on write)方案中,虛擬機創建成功后的適當時刻,在后臺執行ceph的rbd命令,斷開基礎鏡像和增量克隆虛擬磁盤的依賴鏈實現每個虛擬機相互獨立。
了解新的鈦云服務
新鈦云服務出品的一些優質技術干貨