OpenStack學習筆記(四)Cinder組件

Cinder主要架構

與nova類似,cinder也採用的是鬆散的架構理念,由cinder-api統一管理外部對cinder的調用,cinder-scheduler負責調度合適的節點去構建volume存儲。volume-provider通過driver負責具體的存儲空間,然後cinder內部依舊通過消息隊列queue溝通,解耦各子服務支持異步調用。

 

 

cinder-sheduler篩選機制

cinder-sheduler通過filter進行刪選,允許使用第三方的filter,自定義篩選內容。

 

下面我們從創建一個卷的流程來分析cinder的各個組件

 

cinder-api

 

scheduler

通過名爲volume_create_scheduler的Flow執行調度。

 

cinder-volume

當cinder-volume接收到消息,才真正開始實際創建volume,cinder-volume通過driver來創建volume,方式類同於cinder-scheduler,也是通過Flow(名稱爲 volume_create_manager)的方式

 

瞭解一下LVM 和Ceph

此外,cinder通過 driver 架構,可以支持多種 back-end(後端)存儲方式,包括 LVM,NFS,Ceph 和其他諸如 EMC、IBM 等商業存儲產品和方案。

我們來了解一下LVM 和Ceph是做什麼的。

LVM是Linux環境下對磁盤分區進行管理的一種機制,其實際是建立在硬盤和分區之上的一個邏輯層,形成一個存儲池。用來提高磁盤分區管理的靈活性。PV是指物理卷(操作系統識別到的物理硬盤),VG是指卷組(也就是物理捲進行邏輯整合後形成的邏輯上連成一片的邏輯硬盤),LV是指邏輯卷(將整塊的VG根據功能或者其他因素和劃分爲不同的分區,每個分區爲一個LV)

舉個栗子:PV比作地球的一個板塊,VG則是一個地球(將各個物理卷(板塊)在邏輯上連接起來成爲地球),在地球上劃分一個區域並標記爲亞洲,則亞洲就相當於一個LV(也可以按照其他規則劃分,比如國家,那中國就是一個LV)

Ceph是另一種分佈式文件系統,作用同樣主要是管理磁盤,將硬件磁盤在邏輯上整合起來,然後提供給外部使用。當外部需要存儲一個文件時,其實這個文件是打散分割成小塊隨機存儲到不同的物理硬盤中的。所以做容災備份時也是各部分做各部分的鏡像。

 

掛載volume

創建完成之後,通過attach操作將此volume掛載到虛擬機上,這樣虛擬機就成功獲得該volume作爲虛擬硬盤使用

 

卸載volume

detach volume相當於斷開掛載狀態,再刪除volume這樣一個逆向的過程。我們分析掛載的本質,其實是通過volume連接,讓控制節點上的Iscsi initiator將計算節點上的Iscsi Target的volume識別爲一個硬盤,再通過XML文件建立映射使得虛機能夠使用這個volume。

所以卸載volume就是1.去掉映射  2.處理緩存中的數據  3.刪除對應的SCSI設備 4.斷開Iscsi Target連接 5.刪除該Iscsi Target

 

cinder擴容

非掛載狀態的volume是可以通過extend進行擴容的(如果已經掛載上的volume可以先卸載再擴容),cinder 是不允許縮小 volume

cinder-api接收到擴容請求,通過消息隊列轉發給cinder-volume,cinder-volume執行 lvextend 命令進行擴容(擴多少是不是由cinder-pai帶過來的參數決定?還是不用帶參數通過別的方式實現,週一來試試)

 

刪除 volume

delete volume同樣不能刪除已經掛載的volume,需要先detach到Available 狀態才能執行delete volume,cinder-volume 通過執行 lvremove 命令刪除volume(先清除邏輯卷LV上面的數據,再刪除該LV)

 

Snapshot Volume 操作

volume快照可以在對正在掛載狀態的volume進行操作,但是有可能會數據不一致。如果需要保持數據一致,可以先detach停掉磁盤IO操作,使該volume處於Available 狀態

cinder-volume 通過執行 lvcreate 創建 snapshot,volume的快照本身也是一個邏輯卷,具有邏輯卷的所有特性。但是volume的快照根據其採取的volume-provider不同,有不同方式的快照。這些快照對源volume的依賴程度是完全不同的

基於LVM的磁盤管理的是完全copy當前volume到一個新的LV,對源volume基本無依賴。但是對於基於Ceph這一類的分佈式文件系統的volume快照,則僅僅是對於當前volume的數據狀態建立一個指針,對源voluume的依賴極高。所以snapshot volume基本用來做快速回溯而不是容災備份(問題:第二種方式的volume快照要是源volume損壞了怎麼辦?答:一般會備份多個快照,極大降低了源快照損壞的問題)

 

backup volume操作

backup volume解決了snapshot volume對源volume的依賴問題,主要用來恢復volume,而snapshot volume更多的是用來快速回溯(針對源volume沒有損壞但是需要回退某些操作的需求)

 

//backup支持增量備份,只需要指定incremental 選項即可

 

restore操作

根據backup備份進行restore恢復,創建一個空的volume,然後裝載NFS讀取container 目錄中backup備份的meatdata,將快照數據解壓寫入新建的這個volume中,最後恢復meatdata,restore完成。

 

Boot from Volume操作

之前我們考慮的都是怎麼將volume安全的作爲存儲盤,事實上volume同樣可以作爲啓動盤。之前在上一篇nova Launch學習中,所用到的是,直接從 image launch(Boot from image直接獲取image ),或者從 instance 的 snapshot launch(Boot from snapshot通過快照獲取image)兩種方式。

其實創建節點還可以通過Boot 以volume作爲啓動盤進行創建。Boot 提供三種方式:

1.Boot from volume (從現有的bootable獲取image直接進行Launch操作)


2.Boot from image (創建一個新的 volume,將公用 image 的數據 copy 到 volume,然後從該 volume launch)


3.Boot from volume snapshot (通過指定的 volume snapshot 創建 volume,然後從該 volume launch,前提是該snapshot 對應的源 volume 是 bootable 的)
 

boot的操作流程是(以第一種Boot from volume舉例),選擇鏡像文件作爲image,填寫即將創建的虛機名稱,執行Launch操作,更新volume 列表,執行attach掛載操作。Boot完成

問答:boot from volume 的 instance 也可以執行 live miagrate,請大家思考一下 volume 是如何 migrate 到目標節點的?

答:將作爲啓動盤的volume detach 然後重新掛載到新節點上(待校驗)×

//週一去做實操,查看日誌校驗

 

理解 cinder-volume 如何支持多 backend

主要是driver機制,cinder-volume與實際提供存儲的volume-provider可以不在同一個節點上,因爲cinder-volume可以通過driver對volume-provider進行管理,在不在同一個節點上都沒關係,所以同樣控制節點讀寫數據的時候不用經過存儲節點,只要調driver就可以了。

 

小結一下

cinder主要是爲 instance 提供虛擬磁盤

snapshot volume和backup機制提供快速回溯以及容災備份保障安全

cinder-api 和cinder-scheduler還是老樣子,cinder-api 作爲暴露給外部的接口處理各種調用請求,cinder-scheduler篩選合適的節點,cinder-volume進行volume創建,delete volume負責卷的銷燬,extend對於存儲不夠的節點進行擴容,attach將volume掛載到虛擬機上,detach將volume從虛擬機上卸載下來。

以上都是cinder作爲提供存儲盤的基礎功能,除此之外,cinder還可以將volume作爲啓動盤,進行Launch操作。這樣新建虛機就不僅限於使用Glance的通用image和已有的snapshot,可以通過卷引導的方式,選用存儲池裏自定義的其他鏡像。

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章