每天5分鐘複習OpenStack(十)Ceph 架構

ALEX_li88發表於2023-11-22

在很多關於Ceph的文章中,通常會介紹一堆概念。雖然這些概念很重要,但是對於一個新手來說,同時接受太多的概念實際上很難消化。因此,在閱讀本章節時要保持輕鬆的心情,只需要對所有的概念有個瞭解就可以了,因為這些概念在接下來的Ceph章節中都會被反覆提到。

1、Ceph是什麼?

“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”這句話說出了Ceph的特性,它是可靠的可擴充套件的統一的分散式的儲存系統。Ceph可以同時提供物件儲存RADOSGW(Reliable、Autonomic、Distributed、Object Storage Gateway)、塊儲存RBD(Rados Block Device)、檔案系統儲存Ceph FS(Ceph Filesystem)3種功能。

  • 可靠性,因為它使用資料冗餘和容錯機制來保護資料的完整性和可靠性。它將資料分散儲存在多個儲存節點上,透過資料複製和資料恢復技術來避免資料丟失。即使一個儲存節點發生故障,資料仍然可以透過其他節點進行訪問和恢復。(ceph 是支援多種冗餘級別的最小稱為盤級別冗餘)

  • 可擴充套件性,因為它使用了分散式儲存架構。它可以透過增加儲存節點,來擴充套件儲存容量和效能。每個節點都可以平行處理和儲存資料,因此可以線性地增加整個系統的儲存容量和吞吐量。這種可擴充套件性使得Ceph非常適合處理大規模資料儲存和處理需求。

  • 統一性:因為它提供了多種儲存功能,包括物件儲存塊儲存檔案系統儲存。這些不同型別的儲存可以在同一個Ceph叢集中同時存在,並且可以根據不同的應用需求進行靈活部署和管理。這種統一性簡化了儲存架構和管理,並且提供了更好的靈活性和應用相容性。

  • 分散式:因為它將資料分散儲存在多個節點上,並且透過網路連線實現節點之間的通訊和資料傳輸。每個節點都可以獨立處理和儲存資料,沒有單點故障,並且可以進行橫向擴充套件。分散式架構提供了高可用性、高效能和靈活性,並且使得Ceph能夠適應各種應用場景和規模

2、三種儲存型別

  • 檔案儲存: 檔案儲存是一種以檔案為單位進行資料儲存的方式。在檔案儲存中,資料以檔案的形式儲存在檔案系統中,可以透過檔名或路徑來進行訪問和管理。檔案儲存適用於儲存相對較小的檔案,並提供了對檔案的完整控制和管理,例如讀取、寫入、修改和刪除檔案。常見的檔案儲存如NFS。其最常見的用途就是可以多使用者同時掛載後,同時進行讀寫操作。

    為什麼我們需要檔案儲存,有塊儲存不就夠了嗎?

    在回答這個問題之前,讓我們先討論一下資料庫。在資料庫等系統中,無論是主從還是多主架構,都面臨著資料不一致的問題。主從架構下,備庫的資料會延遲於主庫,而多主從架構下,如果資料是分散式存放的,則請求只能傳送到相應的節點,如果是非分散式存放的,則會有多份資料,導致叢集的整體利用率不高。

    試想一下,如果我們能將資料只存放一份,其在本質上就解決了在不同節點上資料不一致的問題,我們可以採用類似NFS的架構,將一個目錄對映到多個資料庫節點上,而多個資料庫例項實際上請求的都是同一份資料原檔案。此時利用的就是檔案儲存能支援多使用者同時掛載和讀寫。

    塊儲存是否就不支援多使用者同時讀寫了?

    塊儲存也支援多使用者同時讀寫,但是需要透過適當的許可權控制和管理來確保資料的一致性和安全性,也就是說需要自行解決資料一致性問題。

  • 塊儲存
    塊儲存是一種以塊(通常是固定大小的資料塊)為單位進行資料儲存的方式。在塊儲存中,資料以塊的形式儲存在獨立的儲存裝置上,每個塊都有唯一的識別符號。塊儲存將資料劃分為相對較小且固定大小的塊,這些塊可以根據需要進行讀取、寫入和修改。塊儲存適用於需要隨機讀寫訪問的應用,如資料庫、虛擬機器和作業系統。塊儲存可以理解為一個磁碟或分割槽,在linux 系統中此類裝置被對映為一個 塊型別的檔案。如下圖中的型別為b(block)

ll /dev/sda
brw-rw---- 1 root disk 8, 0 Nov 13 17:53 /dev/sda

而對塊裝置如果用mkfs.xfs 或 mkfs.ext4 等命令執行檔案系統初始化後就是一個檔案系統裝置。

  • 物件儲存 物件儲存以物件形式儲存資料,每個物件都有唯一的識別符號。物件通常包含資料本身以及與其相關的後設資料。雲端儲存服務如Amazon S3和OpenStack Swift就是典型的物件儲存系統。當你上傳照片到雲相簿或者將檔案儲存到雲端時,這些資料都會以物件的形式儲存。每個物件都有一個唯一的識別符號,比如URL或者API金鑰。

ceph自身是一個物件儲存,其能提供物件儲存我們能理解,為什麼其還能提供塊儲存和檔案儲存了?

通用的 RADOS 儲存結構和可靠的分散式儲存技術。透過統一介面可以更好地處理各種資料型別,以及整合其他儲存服務的優勢,從而提供塊儲存和物件儲存和檔案儲存三種儲存功能。

3 、 Ceph的邏輯分層

Ceph 官方給的邏輯架構如下圖

可以總結為兩部分,一個叢集一個客戶端。 叢集就是底層的RADOS叢集。客戶端就是在RADOS叢集之上,利用librados 程式設計介面的進一步抽象。其本質都是RADOS叢集的客戶端。

3.1、客戶端

如果說RADOS叢集是一個具備自我修復等特性,提供了一個可靠、自動、智慧的分散式儲存,那使用者怎麼使用他了?因此RADOS提供了供librados庫,允許應用程式直接訪問,支援C/C++、Java和Python等語言。
那是否有一個librados庫就可以被使用者直接訪問到了,理論上只需要呼叫其庫就可以使用DADOS叢集。
但是又有多少人有能力直接用程式設計能力去訪問RADOS叢集了。

因此在librados庫基礎上做了進一步的封裝,針對主流的塊儲存使用提供了 RBD,針對檔案儲存使用提供Ceph FS ,基於當前流行的RESTful協議的閘道器,並且相容S3和Swift,提供了radosgw
因為無論是librados、rdb radosgw Ceph fs 都是RADOS的客戶端。

3.2 、RADOS叢集

一個最小化的RADOS叢集只有三個元件 MONMGROSD ,其系統架構如下

看到這可能有小夥伴會說 不對把,不是應該還有mds嗎?
先說mds,其主要功能就給檔案儲存提供後設資料索引的,如果我們Ceph叢集不需要檔案儲存,就不需要mds元件了。

3.3 RADOS叢集元件

  • mon: Ceph Monitor是負責監視整個群集的執行狀況的,這些資訊都是由維護叢集成員的守護程式來提供的,如各個節點之間的狀態、叢集配置資訊。Ceph monitor map包括OSD Map、PG Map、MDS Map和CRUSH等,這些Map被統稱為叢集Map。這五張map可以說代表了mon的大部分功能。

  • MGR:Ceph ManagerMGR 承載了許多輔助功能,如監控、報告和資源分配。現在,Ceph Manager Daemon 更多地實現了監視、管理及一些自動化任務,包括維護叢集後設資料、系統故障檢測等。它可以實現跨多個 Ceph 元件的自動容災和排程,提高整個系統的穩定性和可靠性。

  • OSD: OSD是Ceph的物件儲存守護程式。它負責儲存資料,處理資料複製、恢復、重新平衡,並透過檢查其他守護程式是否有故障來向Ceph Monitor提供一些監控資訊。每個儲存伺服器(儲存節點)執行一個或多個OSD守護程式,通常每個磁碟儲存裝置對應一個OSD守護程式

總結: 一個叢集需要被訪問,總需是先需要一個認證功能,認證之後將使用者的請求排程到後端真正的服務,這個過程就是mon的功能,因為其是分散式的儲存,其靠Paxos演算法來保證資料一致性。為了叢集的穩定,mon維護了叢集的map。 mgr則更多是提供監控和輔助功能來減輕mon的負擔,osd則是資料真正的存放位置。

在上文中我們說過Ceph叢集是無中心節點的分散式儲存,那其是怎麼做到了?

一切的一切都是靠計算,簡單的說就是真正的資料儲存在那個osd上,其是靠計算出來,而非查詢後設資料節點查詢出來的。這個計算的過程就是CRUSH演算法。關於CRUSH演算法我們將在後面章節來討論,這裡我們瞭解Ceph叢集的結構,下一章我們將手動部署一套最小化的Ceph叢集來體驗下Ceph儲存的使用。

相關文章