[ ceph ] 基本概念、原理、架構介紹


1. Ceph 架構

 

 

 

1.1 Ceph 接口

Ceph 支持三種接口:

  • Object:有原生的API,而且也兼容 Swift 和 S3 的 API
  • Block:支持精簡配置、快照、克隆
  • File:Posix 接口,支持快照

 

1.2 Ceph 核心組件及概念介紹

  • Monitor:一個 Ceph 集群需要多個 Monitor 組成的小集群,它們通過 Paxos 同步數據,用來保存 OSD 的元數據。
  • OSD:OSD 全稱 Object Storage Device,也就是負責響應客戶端請求返回具體數據的進程,一個Ceph集群一般有很多個OSD。
  • CRUSH:CRUSH 是 Ceph 使用的數據分布算法,類似一致性哈希,讓數據分配到預期的位置。
  • PG:PG全稱 Placement Groups,是一個邏輯的概念,一個PG 包含多個 OSD 。引入 PG 這一層其實是為了更好的分配數據和定位數據。
  • Object:Ceph 最底層的存儲單元是 Object對象,每個 Object 包含元數據和原始數據。
  • RADOS:實現數據分配、Failover 等集群操作。
  • Libradio:Libradio 是RADOS提供庫,因為 RADOS 是協議,很難直接訪問,因此上層的 RBD、RGW和CephFS都是通過libradios訪問的,目前提供 PHP、Ruby、Java、Python、C 和 C++的支持。
  • MDSMDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務。
  • RBD:RBD全稱 RADOS Block Device,是 Ceph 對外提供的塊設備服務。
  • RGW:RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。
  • CephFS:CephFS全稱Ceph File System,是Ceph對外提供的文件系統服務。

 

2. 三種存儲類型

 

塊設備:主要是將裸磁盤空間映射給主機使用,類似於SAN存儲,使用場景主要是文件存儲,日志存儲,虛擬化鏡像文件等。

文件存儲:典型代表:FTP 、NFS 為了克服塊存儲無法共享的問題,所以有了文件存儲。

對象存儲:具備塊存儲的讀寫高速和文件存儲的共享等特性並且通過 Restful API 訪問,通常適合圖片、流媒體存儲。

 

2.1 Ceph IO流程及數據分布

 

步驟:

  1. client 創建cluster handler。
  2. client 讀取配置文件。
  3. client 連接上monitor,獲取集群map信息。
  4. client 讀寫io 根據crushmap 算法請求對應的主osd數據節點。
  5. 主osd數據節點同時寫入另外兩個副本節點數據。
  6. 等待主節點以及另外兩個副本節點寫完數據狀態。
  7. 主節點及副本節點寫入狀態都成功后,返回給client,io寫入完成。

 

新主IO流程圖

說明:

如果新加入的OSD1取代了原有的 OSD4成為 Primary OSD, 由於 OSD1 上未創建 PG , 不存在數據,那么 PG 上的 I/O 無法進行,怎樣工作的呢?

 

 

 

 

步驟:

(1)client連接monitor獲取集群map信息。

(2)同時新主osd1由於沒有pg數據會主動上報monitor告知讓osd2臨時接替為主。

(3)臨時主osd2會把數據全量同步給新主osd1。

(4)client IO讀寫直接連接臨時主osd2進行讀寫。

(5)osd2收到讀寫io,同時寫入另外兩副本節點。

(6)等待osd2以及另外兩副本寫入成功。

(7)osd2三份數據都寫入成功返回給client, 此時client io讀寫完畢。

(8)如果osd1數據同步完畢,臨時主osd2會交出主角色。

(9)osd1成為主節點,osd2變成副本。

 

3. Ceph 如何存取數據

這里有一篇文章寫的通俗易懂:http://www.xuxiaopang.com/2016/11/08/easy-ceph-CRUSH/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM