目錄
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 是個軟體定義的儲存系統有以下幾個特點:
- 在同一平台下可同時提供 Object Storgae & Block Storage & File System 等三種不同的服務。
- 強大的擴展能力。
- 不受限於任何硬體規格,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 提供了 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 提供了以下功能:
- 將資料有效率的存放在不同的儲存裝置中。
- 即使移除整個 cluster 中的儲存裝置,也不會影響到資料正常的存取。
- 不需要有任何主要的管理裝置(or 節點)來做為控管之用。
- 可依照使用者所定義的規則來處理資料分散的方式。
CRUSH 包含了兩個部分,分別是 Algorithm & Map。
4.1.1 CRUSH Algorithm
CRUSH Algorithm 的用途在於可透過資料儲存位置的計算,決定如何存取資料;也因為是透過演算法計算的方式,可以有效避免 single point of failure 的問題發生。
4.1.2 CRUSH Map
CRUSH Map 是一群資訊的集合,包含了:
- OSD(Object Storage Daemon) 集合的資訊
- 由多個 device 所匯集而成的實體位置資訊
- 多個用來指定 Ceph 應該如何在 ceph cluster pool 進行資料複製的規則
透過以上資訊,CRUSH 可以將資料分散存放在不同的實體位置,並避免單點錯誤造成資料無法存取的狀況發生。
4.2 Placement Group
首先用下圖來說明 object / Placement Group / OSD 之間的關係:
當使用者把資料(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 完整個功能主要有以下幾項:
- 資料儲存
- 資料複製
- 資料回復
- 資料回填(backfilling, 通常發生於新 OSD 加入時)
- Rebalance (發生於新 OSD 加入 CRUSH map 時)
- 以 heartbeat 的方式取得其他 OSD 的狀態,並將資訊提供 Ceph Monitor
4.4 Monitor
為了有效的在分散式的環境下存取檔案,每一個 Ceph Monitor daemon 維護著很多份與 cluster 相關的映射資料(map),包含:
- Monitor map
- OSD map
- Placement Group (PG) map
- CRUSH map
- 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 架構:
其中最底層的 RADOS 是由 OSD & Monitor & MDS 三種所組成:
以上則是提供不同的 middleware( radosgw / rbd / cephfs),呼叫 librados 進行資料存取,來提供不同的 service(Object / Block / File System)。
5.2.1 Object Storage
Ceph Object Storage 的架構如下:
其中底層由 OSD & Monitor 來組成,透過 librados 來控制協調;上層則提供了 RADOSGW 來達成與 OpenStack Swift & Amazon S3 APIs 的一致性。
5.2.2 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 的架構如下:
底層的部分同樣是由 RADOS(OSDs + Monitors + MDSs) 提供,在上一層同樣與 librados 溝通,最上層則是有不同的 library 將其轉換成標準的 POSIX 檔案系統供使用。
OSD: object-based storage device
回覆刪除当一个人不工作时,另一个人就有很大的机会 https://buy.fineproxy.org/eng/proxy-trial.html 。尽管连接速度通常仍然很糟糕,但是这减少了我的头痛次数。
回覆刪除