CEPH架構總體說明

1. Ceph架構說明

1.1 整體架構圖

CEPH架構

1.2 接口類型

1.2.1 RBD

rados block device,主要面向雲平臺的虛擬機提供虛擬磁盤,類似於SAN。RBD提供兩種接口,一種是通過QEMU Driver提供KVM虛擬機使用,另一種是在操作系統內核態實現了一個內核模塊,直接把塊設備映射給物理主機,由物理主機直接使用。

1.2.2 CephFS

提供libcephfs和標準的POSIX接口,CephFS類似傳統的NAS存儲,通過NFS或者CIFS提供文件系統或者文件目錄服務。

1.2.3 RadosGW

基於Librados實現了S3(AWS)和Swift(OpenStack)對象存儲接口。相比於NAS存儲,對象存儲放棄了目錄樹結構,採用扁平化組織形式,有利於使用無限空間的擴展。

1.3 RADOS

RADOS是CEPH存儲系統的基石,是一個擴擴展的、穩定的、自我管理的、可修復的對象存儲系統,是CEPH存儲系統的核心,實現存儲系統應該有的所有功能:

  • Monitor模塊爲整個集羣提供全局的配置和系統信息
  • 通過CRUSH算法提供對象的尋址
  • 完成了對象的讀寫等其他數據功能
  • 提供了數據均衡功能
  • 通過Peering過程完成PG數據一致性過程
  • 提供數據自動恢復的功能
  • 提供克隆和快照功能
  • 實現了對象存儲分層存儲的功能
  • 實現了數據一致性檢查工具scrub

2. RADOS概念介紹

2.1 Monitor

多個Monitor組成集羣實現高可用,通過Paxos算法實現了數據一致性,存儲了整個集羣的節點信息等全局的狀態信息,包括:

  • MonitorMap:fsid、Monitor地址和端口、current epoch
  • OSD Map:OSD的列表以及狀態信息
  • MDS Map:MDS的列表及狀態信息

2.2 RADOS對象存儲

  • 對象標誌:ID
  • 對象的數據:對象本地文件系統的一個文件
  • 對象的元數據:保存在文件對應的擴展屬性中,也可以存儲在Leveldb中

2.3 pool和PG

Pool是一個抽象的存儲池,規定了數據冗餘的類型對應的副本分佈策略,支持兩種副本類型:Replicated、Erasure Code。

PG(Placement Group)放置策略組(也可以稱作複製組),他是對象的集合,該PG中的所有對象都具有相同的放置策略:
PG和OSD關係

2.4 對象尋址過程

對象尋址過程指的是對象在集羣中分佈的位置,分爲兩層:

  • 對象到PG的映射:靜態Hash映射,pg_num = hash(object_id)%pg_count
  • PG到OSD的映射:通過CRUSH算法計算,osd[3] = CRUSH(pg)

2.5 對象讀寫

對象寫過程:

  • client向pg所在的主osd發送寫請求
  • 主osd接收寫請求後,同時向兩個從osd發送寫請求,同時主OSD寫入本地存儲中
  • 主osd接收到另外兩個從osd的ack後,同時確保自己也寫成功,就向用戶應答寫成功

對象的讀過程比較簡單:從主osd讀取

2.6 數據均衡

均衡時機:當機器中osd數目發生變動,系統中的CRUSH Map發生變化,從而引起對象尋址過程中,PG到OSD的映射發生變化,從而引發數據遷移(遷移的數據量不是很好估算)

遷移單位:CEPH數據遷移的最小單位是PG
數據遷移前
數據遷移後

2.7 Peering

  • 發起時機:當OSD啓動(或者失效時),該OSD上的主PG會發起一個Peering的過程
  • 具體工作:一個PG內的所有副本通過PG日誌來達成數據一致的過程

Peering完成後就能對外提供服務了,Peering發現對象副本數據不一致,該對象會被標記出來,待後續恢復完成後,恢復後才能響應用戶請求。

2.8 Recovery&Backfill

  • 恢復的對象:peering、scrub發現的
  • 恢復的過程:根據pg日誌來恢復
  • backfill對象:當OSD長時間失效後,重新加入到集羣中,沒有辦法根據pg日誌恢復了。另一種情況是當osd發生了數據遷移,也需要進行backfill
  • backfill過程:通過逐一回填pg中的對象保證數據一致性

2.9 糾刪碼

糾刪碼(Erasure Code)說明見:https://blog.csdn.net/cjfeii/article/details/105574338。
CEPH對舊版本對EC功能支持的還不夠好,H、L版本關於EC的支持感覺還可以。

2.10 快照和克隆

Rados對象存儲系統本身支持Copy-On-Write的快照機制,具體支持兩種模式:

  • 支持pool級別的快照
  • 支持用戶自己定義的快照實現(比如:rbd的快照)

2.11 Cache Tier

Cache Tier是Ceph服務端緩存的一種方案,可以提升存儲在後端存儲層的I/O性能。

Rados實現了以Pool爲基礎的自動分層存儲機制:cache pool + data pool,Cache tier對用戶是透明的,Rados Objecter決定往哪裏存儲對象,Cache tier支持writeback和readonly兩種模式:

  • writeback:用戶讀寫操作都會發往Cache tier,適用於易變的數據
  • readonly:Cache tier只是作爲讀的緩存,髒對象會按照既定策略清理,適用於不變的數據,比如:圖片、視頻、DNS、X-RAY等
    cache tier示意圖

2.12 scrub

scrub用於做rados集羣的數據一致性檢查,支持兩種檢查方式:

  • scrub:檢查一個PG內對象的各個osd副本的元數據是否一致
  • deep scrub:比較對象的副本數據是否一致

3. 參考資料

  • Ceph源碼分析:https://yuedu.163.com/source/cda64592f9a746559e528c40ec3ceb1b_4
  • 糾刪碼原理說明:https://blog.csdn.net/cjfeii/article/details/105574338
  • Cache Tier配置說明:https://yq.aliyun.com/articles/606731
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章