簡介
cinder 在虛擬機與具體存儲設備之間引入了一層 “邏輯存儲卷” 的抽象,爲虛擬機提供持久化的塊存儲能力,實現虛擬機存儲卷的創建、掛載、卸載、快照等生命週期管理。
cinder 本身並不是一種存儲技術。它只是提供了一箇中間抽象層,爲後端不同的存儲技術提供了統一的接口。不同的塊設備服務廠商在 cinder 中以 driver 的形式實現這些接口來與 OpenStack 進行整合。
cinder 默認使用 LVM 作爲後端存儲。
結構
cinder 主要由 cinder-api、cinder-scheduler、cinder-volume 以及 cinder-backup 組成,它們之間通過 AMQP 消息隊列進行通信。
- cinder-api :cinder 的 HTTP 接口。
- cinder-volume :運行在存儲節點上,管理具體存儲設備的存儲空間。
- cinder-scheduler :根據預定的策略選擇合適的 cinder-volume 節點來處理用戶請求。如果用戶明確指定了具體的存儲節點,則該節點上的 cinder-volume 會進行處理,而無需 cinder-scheduler 的參與。
- cinder-backup :提供存儲卷的備份功能,將存儲卷備份到存儲後端,如 swfit 。
調度
FilterScheduler 首先使用指定的 Filters 過濾得到符合條件的 cinder-volume 節點;然後對得到的主機列表計算權重並排序,選擇最佳的一個。
管理卷
cinder-volume 用於管理存儲卷的生命週期。
創建好的 volume 一般通過 iSCSI Target 的方式展現給 nova,這樣 nova 就可以通過 iSCSI 協議將其連接到計算節點上供虛擬機使用。
- iSCSI 屬於傳輸層協議,規定了 iSCSI Target 和 iSCSI Initiator 間的通信機制。
- iSCSI Target 通常指存儲設備,iSCSI Initiator 則是指通過 iSCSI 協議訪問 iSCSI Target 的客戶端軟件。
備份
cinder-backup 用於將 volume 備份到其他存儲系統上去,默認使用 swift 作爲備份後端。
不同的備份存儲系統以 driver 的形式得以支持。
-
創建備份:cinder-backup 通過 RPC 請求 cinder-volume 服務提供需要備份的卷。
如果該卷處於可用狀態,則直接將其返回給 cinder-backup。
如果該卷正在被使用,則創建該卷的一份快照或克隆,然後返回快照或克隆給 cinder-backup。
cinder-backup 收到備份卷後,把該卷掛載到本機,將數據備份到後端備份存儲。
-
恢復備份:cinder-backup 將需要進行數據還原的卷掛載到本機,然後將數據從備份存儲讀出,恢復到捲上。