2014年10月11日 星期六

Ceph 簡介

Ceph 簡介

目錄

1、前言

什麼是 Ceph?

它是以 RADOS (Reliable Autonomic Distributed Object Store) 為主要設計方式的分散式儲存平台,因此在水平擴展的能力極為強大。

以下截錄一段在 inktank 網站上的說明:

Ceph is an open-source, massively scalable, software-defined storage system which provides object, block and file system storage in a single platform. It runs on commodity hardware—saving you costs, giving you flexibility—and because it’s in the Linux kernel, it’s easy to consume.

從以上的內容可以看出,Ceph 是個軟體定義的儲存系統有以下幾個特點:

  1. 在同一平台下可同時提供 Object Storgae & Block Storage & File System 等三種不同的服務。
  2. 強大的擴展能力。
  3. 不受限於任何硬體規格,no vendor lock-in !

一個平台可以同時提供三種服務,簡直是健達出奇蛋一樣,三種願望一次滿足。XD

2、Ceph 功能

Ceph 在三種不同的功能(object / block / file system)中,分別提供了以下特性:

CEPH OBJECT STORE CEPH BLOCK DEVICE CEPH FILESYSTEM
RESTful Interface Thin-provisioned POSIX-compliant semantics
S3- and Swift-compliant APIs Images up to 16 exabytes Separates metadata from data
S3-style subdomains Configurable striping Dynamic rebalancing
Unified S3/Swift namespace In-memory caching Subdirectory snapshots
User management Snapshots Configurable striping
Usage tracking Copy-on-write cloning Kernel driver support
Striped objects Kernel driver support FUSE support
Cloud solution integration KVM/libvirt support NFS/CIFS deployable
Multi-site deployment Back-end for cloud solutions Use with Hadoop (replace HDFS)
Disaster recovery Incremental backup

3、與 OpenStack 整合狀況

Folsom 版本開始,Ceph 就已經正式整合進 OpenStack 了。

Ceph for OpenStack

Ceph 提供了 Block Device service 給 Cinder & Glance & Nova 使用,還包含了其他強大的特性,例如:High Availability、Fault Tolerant … 等等。

此外 Ceph 也完全相容 Swift API,因此可以取代 Swift 提供 Object Storage service 之用;當然認證部分當然也整合了 Keystone。

由於以上原因,Ceph 可說是提供了一個完整的 storage solution 可用來整合進 OpenStack 中。

4、Ceph 基礎元素

在開始研究 Ceph 之前,有些基礎的元素是需要先了解的,以下逐一介紹:

4.1 CRUSH

CRUSH 在整個資料分散上扮演著重要角色,從「CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data」一文中可以看出 CRUSH 的功能:

CRUSH, a scalable pseudo-random data distribution function designed for distributed object-based storage system that efficiently maps data objects to storage devices without relying on a central directory.

CRUSH is designed to facilitate the addition and removal of storage while minimizing unnecessary data movement.

The algorithm accommodates a wide variety of data replication and reliability mechanisms and distributes data in terms of user-defined policies that enforce separation of replicas across failure domains.

從上面的說明可以看出,CRUSH 提供了以下功能:

  1. 將資料有效率的存放在不同的儲存裝置中。
  2. 即使移除整個 cluster 中的儲存裝置,也不會影響到資料正常的存取。
  3. 不需要有任何主要的管理裝置(or 節點)來做為控管之用。
  4. 可依照使用者所定義的規則來處理資料分散的方式。

CRUSH 包含了兩個部分,分別是 Algorithm & Map。

4.1.1 CRUSH Algorithm

CRUSH Algorithm 的用途在於可透過資料儲存位置的計算,決定如何存取資料;也因為是透過演算法計算的方式,可以有效避免 single point of failure 的問題發生。

4.1.2 CRUSH Map

CRUSH Map 是一群資訊的集合,包含了:

  1. OSD(Object Storage Daemon) 集合的資訊
  2. 由多個 device 所匯集而成的實體位置資訊
  3. 多個用來指定 Ceph 應該如何在 ceph cluster pool 進行資料複製的規則

透過以上資訊,CRUSH 可以將資料分散存放在不同的實體位置,並避免單點錯誤造成資料無法存取的狀況發生。

4.2 Placement Group

首先用下圖來說明 object / Placement Group / OSD 之間的關係:

Placement Group

當使用者把資料(object)存到 cluster 中時,每個 object 都會對應到一個 placement group(PG),而每一個 PG 都會對應到一組 OSD,其中第一個 OSD 為 primary,其他則是 replica。

多個 PG 也可以對應到同一個 OSD,因此 PG & OSD 其實是種多對多的關係。

而 OSD 在幹嘛? 就是把資料存入到不同的實體位置囉!

4.3 Object Storage Daemon (OSD)

Ceph OSD(Object Storage Daemon) Daemon 的主要工作就是透過網路,進行實際資料(object)的存取,但 OSD 完整個功能主要有以下幾項:

  1. 資料儲存
  2. 資料複製
  3. 資料回復
  4. 資料回填(backfilling, 通常發生於新 OSD 加入時)
  5. Rebalance (發生於新 OSD 加入 CRUSH map 時)
  6. 以 heartbeat 的方式取得其他 OSD 的狀態,並將資訊提供 Ceph Monitor

4.4 Monitor

為了有效的在分散式的環境下存取檔案,每一個 Ceph Monitor daemon 維護著很多份與 cluster 相關的映射資料(map),包含:

  1. Monitor map
  2. OSD map
  3. Placement Group (PG) map
  4. CRUSH map
  5. MDS map (若使用 Ceph File System,還會有這組映射資料)

主要是用來監控 Ceph Storage Cluster 上的即時狀態,確保 Ceph 可以運作無誤。

4.5 Metadata Server (MDS)

負責管理 Ceph File System 上的 metadata,且讓使用者可以把 Ceph File System 當作一般的檔案系統操作。

Ceph Object Storage & Ceph Block Device 不會使用到 MDS。

5、Ceph Storage Cluster 架構

5.1 Ceph Node 類型

組成 Ceph Storage Cluster 的元素稱為 Ceph node,而 Ceph node 共有以下類型:

5.1.1 Ceph OSD Daemons

實際與 client 溝通進行資料存取的即為 OSD daemon。

每個 object 被儲存到多個 PG(placement group) 中,每個 PG 再被存放到多個 OSD 中。

為了達到 Active + Clean 的狀態,確認每份資料都有兩份的儲存,每個 Ceph Storage Cluster 中至少都必須要有兩個 Ceph OSD。

5.1.2 Monitor

在每一個 Ceph Storage Cluster 中,都有多個 Monitor 存在,每個 Monitor 都維護著上述的五種映射資訊(monitor map / OSD map / PG map / CRUSH map / MDS map),以及 monitor / OSD / PG …等狀態的歷史資訊。

5.1.3 MDS

作為處理 Ceph File System 的 metadata 之用,若僅使用 Block or Object storage,就不會用到這部分功能。

5.2 完整架構

首先用下圖來表示完整的 Ceph 架構:

Ceph Architecture

其中最底層的 RADOS 是由 OSD & Monitor & MDS 三種所組成:

enter image description here

以上則是提供不同的 middleware( radosgw / rbd / cephfs),呼叫 librados 進行資料存取,來提供不同的 service(Object / Block / File System)。

5.2.1 Object Storage

Ceph Object Storage 的架構如下:

Ceph Object Storage

其中底層由 OSD & Monitor 來組成,透過 librados 來控制協調;上層則提供了 RADOSGW 來達成與 OpenStack Swift & Amazon S3 APIs 的一致性。

5.2.2 Block Storage

Ceph Block Storage 的架構如下:

Ceph Block Storage

Ceph Block device 提供了 thin-provison / 可調整大小 / 分散儲存 / 快照 / 一致性 … 等功能。

Ceph block storage 除了可以被 Linux kernel 直接使用外,也可以被 KVM / Qemu 使用,也可以透過 LIBRBD 與其他雲端系統(例如:OpenStack、CloudStack)整合。

5.2.3 File System

Ceph File System 的架構如下:

Ceph File System

底層的部分同樣是由 RADOS(OSDs + Monitors + MDSs) 提供,在上一層同樣與 librados 溝通,最上層則是有不同的 library 將其轉換成標準的 POSIX 檔案系統供使用。

6、參考資料

1 則留言: