OpenStack 入門及三大存儲組件淺析
大家好,想必大家也聽說過 openstack ,很多人在學習過程中都感覺openstack 整個架構比較復雜,涉及到的組件較多,學習也比較吃力。
一、認識 OpenStack
OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.
以上是官網對 OpenStack 的定義,OpenStack 對整個數據中心的計算、存儲以及網絡資源進行統一的管理。云計算平臺是一個面向服務層面的架構,按照提供服務的不同可分為 IaaS(Infrastructure as a Service,基礎設施即服務)、PaaS(Platform as a Service,平臺即服務)和 SaaS(Software as a Service,軟件即服務)。由上述官網定義來看,OpenStack 針對的是 IT 基礎設施,是 IaaS 層的云操作系統。
OpenStack 已經走過了 9 個年頭。每半年會發布一個新的版本,版本以字母順序命名。現在已經到了第 18 個版本 Rocky(版本 R),從最初的只有兩個模塊(服務),發展到現在的數十個模塊,每個模塊都作為獨立的子項目開發。那么,既然有那么多的服務模塊,我們應該如何去進行高效的學習呢——抓住 openstack 最本質的東西(計算,存儲,網絡資源的統一管控),如下圖所示:
在 openstack 這么龐大的架構里面,究竟哪些組件模塊是負責管理計算,存儲,網絡資源的呢?組件之間又是如何進行協調工作的呢?(下圖被稱為「神圖」,圖片有點大,請橫屏來看)
架構是個好東西,它能夠幫助我們站在高處看清楚事物的整體結構,上圖是 openstack 各個組件之間以及組件內部的交互圖,其實也并不復雜。今天我們先來學習一下 openstack 的三大存儲組件 Glance,Cinder,Swift。
二、淺析 OpenStack 的三大存儲組件 Glance,Cinder,Swift
I.Glance,Cinder,Swift 是什么?
首先咱們要明白,Glance,Cinder,Swift 究竟是什么東西?在 openstack 當中,Glance 是負責提供 Image Service(鏡像服務)的,這個所謂的鏡像服務指的就是去管理 Image,讓用戶能夠發現、獲取和保存 Image。Image 是一個模板,里面包含了基本的操作系統和其他的應用軟件,在云環境的大需求下,(大規模)手動去安裝部署系統比較不靈活,時間較長,效率低下,這個時候就需要更加高效的解決方案————Image。再來看 Cinder,在 openstack 當中,Cinder 是用來提供塊存儲服務的。什么是塊存儲?大家其實可以簡單理解為裸硬盤,通過某種協議(SCSI,iSCSI,SAN 等)掛接裸硬盤,然后進行分區、格式化、創建文件系統,或者直接使用裸硬盤提供存儲空間,進行數據存儲。Swift,為 openstack 提供一種分布式、持續虛擬對象存儲,他其實類似于 Amazon Web Service 的 S3 簡單存儲服務。Swift 具有跨節點百級對象的存儲能力,內建冗余和失效備援管理,也能夠處理歸檔和媒體流,特別是對大數據(千兆字節)和大容量(多對象數量)的測度非常有效。該服務不是必需的,為可選服務。接下來咱們具體來看下三大組件的內部架構以及各個子組件的作用。
II.Glance
Glance-api:接收 REST API 請求,通過其他模塊(glance-registry 及 image store)來完成諸如鏡像的查找、獲取、上傳、刪除等操作。
glance-registry:用于與 MySQL 數據庫交互,用于存儲或獲取鏡像的元數據(metadata)。
image store:是一個存儲的接口層,通過這個接口,glance 可以獲取鏡像,image store 支持的存儲有 Amazon 的 S3、OpenStack 本身的 Swift,還有諸如 ceph,sheepdog,GlusterFS 等分布式存儲。
III.Cinder
Cinder Client 封裝 Cinder 提供的 rest 接口,以 CLI 形式供用戶使用。
Cinder API 對外提供 rest API,對操作需求進行解析,對 API 進行路由尋找相應的處理方法。包含卷的增刪改查(包括從源卷、鏡像、快照創建)、快照增刪改查、備份、volume type 管理、掛載/卸載(Nova 調用)等。
Cinder scheduler 負責收集 backend 上報的容量、能力信息,根據設定的算法完成卷到指定 cinder-volume 的調度。
Cinder volume 多節點部署,使用不同的配置文件、接入不同的 backend 設備,由各存儲廠商插入 driver 代碼與設備交互完成設備容量和能力信息收集、卷操作。
Cinder backup 實現將卷的數據備份到其他存儲介質(目前 Swift/Ceph/TSM 提供了驅動)。
SQL DB 提供存儲卷、快照、備份等數據,支持 Mysql、PG、MSSQL 等 SQL 數據庫。
IV.Swift
Proxy Server:對外提供對象服務 API,由于采用無狀態的 REST 請求協議,可以進行橫向擴展來均衡負載。 ◎Account Server:提供賬戶元數據和統計信息,并維護所含容器列表的服務,每個賬戶的信息被存儲在一個 SQLite 數據庫中。 ◎Container Server:提供容器元數據和統計信息,并維護所含對象列表的服務,每個容器的信息也存儲在一個 SQLite 數據庫中。 ◎Object Server:提供對象元數據和內容服務,每個對象的內容會以文件的形式存儲在文件系統中,元數據會作為文件屬性來存儲,建議采用支持擴展屬性的 XFS 文件系統。
Replicator:檢測本地分區副本和遠程副本是否一致,發現不一致時會采用推式(Push)更新遠程副本,并且確保被標記刪除的對象從文件系統中移除。 ◎Updater:當對象由于高負載的原因而無法立即更新時,任務將會被序列化到在本地文件系統中進行排隊,以便服務恢復后進行異步更新。 ◎Auditor:檢查對象,容器和賬戶的完整性,如果發現比特級的錯誤,文件將被隔離,并復制其他的副本以覆蓋本地損壞的副本;其他類型的錯誤會被記錄到日志中。
Account Reaper:移除被標記為刪除的賬戶,刪除其所包含的所有容器和對象。
三、三大存儲組件的區別
功能上的區別
Glance 提供鏡像服務,他負責對鏡像進行管理,例如發現、注冊,鏡像是產生虛擬機系統盤的模板;Cinder 給虛擬機提供塊級的持久化卷,通過 Cinder 可以實現卷的創建、掛載、快照等功能;Swift 是 openstack 提供的一種分布式、持續虛擬對象存儲。
存儲空間的區別
Glance 并不保存鏡像,他將數據交給后端存儲去進行保存:Swift、本地存儲、OBS 等;Cinder 本身也不保存卷,但他可以通過 Driver 來接管各種存儲,并通過這些存儲給虛擬機提供空間。他可以接管華為 VRM Datastore、VMware Datastore、華為 FusionStorage、華為 OceanStorV3、LVM 等;Swift 它本身維持空間并對外提供對象存儲服務,通常使用本地存儲+XFS 文件系統。
總結一下,今天我們學習了 openstack 以及三大存儲組件的本質以及作用,想要深入學習的同學可以課下去查閱 openstack 相關的文檔,參照對應的文檔不妨可以搭建 openstack 實驗環境來進行一個系統的學習。Openstack經過多年的發展,整個組織架構變得越來越龐大。本身提供多種存儲服務,這也是為了滿足更多不同的需求,體現出開源項目靈活快速的特性。總的說來,當需要去選擇存儲的時候,如果考慮到將來會被多個應用所共同使用,應該視為長期的決策。Openstack作為一個開放的系統,最主要是解決軟硬件供應商鎖定的問題,可以隨時選擇新的硬件供應商,將新的硬件和已有的硬件組成混合的集群,統一管理,當然也可以替換軟件技術服務的提供商,不用動應用。這是開源本身的優勢。